我有一个简单的sql查询,我想使用PDO执行,如下所示:
try {
//connect to server
$dbh = new PDO('mysql:host='.DBHOST.';dbname='.DBNAME, DBUSER, DBPASS);
//check if username is valid
$q="SELECT COUNT(*), first FROM users WHERE email='".$_POST['email']."'";
echo $q;
$stmt=$dbh->prepare($q);
$stmt->execute();
$f=$stmt->fetch();
echo $f[0];
echo $f[1];
catch (PDOException $e) {
echo "There was an internal error resetting your password.";
die();
}
回显$q的输出如下:
SELECT COUNT(*) first FROM users WHERE email='ahg44@cornell.edu'
当我将其复制并粘贴到 phpmyadmin 的 SQL 选项卡中时,查询成功返回我正在寻找的元组。但是,它不会在 php 代码中返回任何内容。
另外,当我调用:$stmt->debugDumpParams();查询后,打印以下内容:
SQL: [64] SELECT COUNT(*), first FROM users WHERE email='ahg44@cornell.edu' Params: 0
起初我认为这是读取 POST 变量的错误,所以我硬编码:
$q="SELECT COUNT(*), first FROM users WHERE email='ahg44@cornell.edu'";
代替原始查询,但这给了我相同的结果。
此外,如果我将查询更改为简单的东西,例如:
$q="SELECT COUNT(*), first FROM users
代码工作正常。
奇怪的是这个查询昨天工作得很好,所以我今天清理代码时一定犯了一个小错误。我有一种预感,这个问题与转义字符有关,但我在网上搜索了一段时间,还没有找到解决方案。谢谢!
虽然你粘贴在问题中的PHP看起来是正确的,但tt看起来你实际上在正在执行的代码中缺少一个逗号。
这一行:
SQL: [64] SELECT COUNT(*) first FROM users WHERE email='ahg44@cornell.edu'
COUNT(*)
后不显示逗号,因此first
将成为COUNT(*)
列的别名,而不是被选为单独的列。
您错误地使用了 PDO。您应该使用预准备语句,如下所示:
$q = "SELECT COUNT(*), first FROM users WHERE email = ?";
$stmt = $dbh->prepare( $q);
$stmt->execute( array( $_POST['email']));
$f = $stmt->fetch();