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

时间:2012-06-28 15:15:33

标签: 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']."'";
    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

代码工作正常。

奇怪的是这个查询昨天工作得很好,所以我今天在清理我的代码时一定犯了一个小错误。我有预感这个问题与转义字符有关,但我一直在网上搜索一段时间,但没有找到解决方案。 谢谢!

2 个答案:

答案 0 :(得分:0)

虽然您在问题中粘贴的PHP看起来是正确的,但看起来您实际上在执行的代码中缺少逗号。

这一行:

SQL: [64] SELECT COUNT(*) first FROM users WHERE email='ahg44@cornell.edu' 

COUNT(*)后没有显示逗号,因此first正在成为COUNT(*)列的别名,而不是被选为单独的列。

答案 1 :(得分:0)

您正在错误地使用PDO。你应该使用预备语句,如下:

$q = "SELECT COUNT(*), first FROM users WHERE email = ?";
$stmt = $dbh->prepare( $q);
$stmt->execute( array( $_POST['email']));
$f = $stmt->fetch();