簡體   English   中英

SQL查詢在phpMyAdmin中有效,但在使用PDO的php中無效

[英]SQL query works in phpMyAdmin but not in php using PDO

我有一個簡單的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看起來正確,但是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();

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM