我遇到了一件相当有趣的事情,我似乎无法弄清楚自己。 每次执行包含'... AND ...'的SQL语句时,结果都是空的。
示例:
echo('I have a user: ' . $email . $wachtwoord . '<br>');
$dbh = new PDO($dsn, $user, $password);
$sql = 'SELECT * FROM user WHERE email = :email AND wachtwoord= :wachtwoord';
$stmt = $dbh->prepare($sql);
$stmt->bindParam(:email,$email,PDO::PARAM_STR);
$stmt->bindParam(:wachtwoord,$wachtwoord,PDO::PARAM_STR);
$stmt->execute();
while($row = $stmt->fetchObject())
{
echo($row->email . ',' . $row->wachtwoord);
$user[] = array(
'email' => $row->email,
'wachtwoord' => $row->wachtwoord
);
}
第一个回显显示正确的值,但是带有
的行echo($row->email . ',' . $row->wachtwoord);
永远不会到达。 我要添加的一些内容: 1)我连接到数据库,因为其他查询工作,只有我在'WHERE失败后添加'AND'的那些。 2)使用,而与不包含'... AND ...'的查询完美配合 3)错误报告打开,PDO在我的查询(或其他任何内容)上没有例外 4)直接在数据库上执行查询给出我想要的内容:
SELECT * FROM user WHERE email = 'jurgen@email.com' AND wachtwoord = 'jurgen'
我可以整天盯着它(我已经做了一次,但我设法绕过'AND'),但也许你们中的一个可以帮助我。
提前谢谢。
尔根
答案 0 :(得分:0)
让我们看看其中一个调试查询
....
$dbh = new PDO($dsn, $user, $password);
function debugQuery($dbh, $querystring, $params) {
$dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$stmt = $dbh->prepare($querystring);
$stmt->execute($params);
echo $querystring, ":<br />\n";
while ( false!== ($row=$stmt->fetch(PDO::FETCH_ASSOC)) ) {
echo ' ', join(', ', $row), "<br />\n";
}
}
debugQuery($dbh, 'SELECT Count(*) as c FROM user', array());
debugQuery($dbh, 'SELECT Count(*) as c FROM user WHERE email=?', array($email));
debugQuery($dbh, 'SELECT Count(*) as c FROM user WHERE wachtwoord=?', array($wachtwoord));
debugQuery($dbh, 'SELECT Count(*) as c FROM user WHERE email=? AND wachtwoord=?', array($email, $wachtwoord));
debugQuery($dbh, 'SELECT Count(*) as c FROM user WHERE email LIKE ? AND wachtwoord LIKE ?', array( '%'.trim($email).'%', '%'.trim($wachtwoord).'%'));
$sql = 'SELECT * FROM user WHERE email = :email AND wachtwoord= :wachtwoord';
$stmt = $dbh->prepare($sql);
...
返回一些有趣的东西。
编辑:似乎不是这样......然后让我们从另一个角度攻击这个
$email = 'emailA';
$wachtwoord = 'wachtwoordA';
echo('I have a user: ' . $email . $wachtwoord . '<br>');
//$dbh = new PDO($dsn, $user, $password);
$dbh = new PDO("mysql:host=localhost;dbname=test", 'localonly', 'localonly');
$dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
// create a temporary table
$dbh->exec('CREATE TEMPORARY TABLE tmp_user ( id int auto_increment, email varchar(32), wachtwoord varchar(32), primary key(id))');
// and fill in exactly the record we're looking for
$dbh->exec("INSERT INTO tmp_user (email, wachtwoord) VALUES ('$email', '$wachtwoord')");
$sql = 'SELECT * FROM tmp_user WHERE email = :email AND wachtwoord= :wachtwoord';
$stmt = $dbh->prepare($sql);
$stmt->bindParam(':email', $email,PDO::PARAM_STR);
$stmt->bindParam(':wachtwoord', $wachtwoord,PDO::PARAM_STR);
$stmt->execute();
while($row = $stmt->fetchObject())
{
echo($row->email . ',' . $row->wachtwoord);
$user[] = array(
'email' => $row->email,
'wachtwoord' => $row->wachtwoord
);
}
在我的php / mysql版本上打印I have a user: emailAwachtwoordA<br>emailA,wachtwoordA
。
答案 1 :(得分:0)
while($row = $stmt->fetchObject()){}
该行不应该(取决于您的设置)?
while( $row = $stmt->fetchAll( PDO::FETCH_OBJ) ){
var_dump( $row ) ;
}