SQL查询在phpMyAdmin中工作,但在使用PDO的php中不工作

SQL查询在phpMyAdmin中工作,但在使用PDO的php中不工作,php,sql,pdo,escaping,Php,Sql,Pdo,Escaping,我有一个简单的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']."'";

我有一个简单的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();
}
echo$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看起来是正确的,但在正在执行的代码中似乎缺少了一个逗号

这一行:

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();

实际上,我的原始代码中有逗号,在粘贴到这里时无意中删除了它。接球不错,但这不能解决我的问题。你确定吗?echo$q的输出还包含以下错误:从电子邮件地址为的用户中选择COUNT*firstahg44@cornell.edu“哦,你是对的。谢谢echo$q现在返回带有逗号的查询。但是获取仍然没有给我任何东西…嗯…我在你的代码中添加了子代码,并从debugDumpParams获得了以下内容。SQL:[49]首先从电子邮件=?Params:1 Key:Position 0:paramno=0 name=[0]是\u param=1 param\u type=2另外,提取仍然没有给我任何信息。