次のように PDO を使用して実行したい単純な SQL クエリがあります。
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
コードは正常に動作します。
奇妙なことに、このクエリは昨日完全に機能したため、今日コードをクリーンアップしているときに小さなエラーが発生したに違いありません。問題はエスケープ文字に関係していると思いますが、オンラインでしばらく検索していて、解決策が見つかりませんでした。ありがとう!