[英]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.