2017-06-18 12 views
-1

WordPress Webサイトで実行される小さなPHPスクリプトを構築しています。COUNTクエリは、使用時にnullを返します。

私の質問にお答えします私のテーブルのアイテムには特定のメールがあります。なんらかの理由で、whereステートメントを使用しないと機能しますが、WHERE [email protected]を追加するとnullが返されます。なぜ私は考えていない。

<?php 
    require('../wp-config.php'); 
    $conn = new mysqli(DB_HOST, DB_USER, DB_PASSWORD, DB_NAME); 
    $email = $_GET['email']; 
    global $wpdb; 

    // This works 
    $countQuery = "SELECT COUNT(*) as count FROM `".$wpdb->prefix."mytable`"; 

    // Once I add a filter, it returns null 
    $countQuery = $countQuery." WHERE `email`=`[email protected]`"; 

    $rs = mysql_query($countQuery); 
    $result = mysql_fetch_array($rs); 

    // Later, I'd like to access $result['count'] 
    // but the $result itself is NULL 
    var_dump("result", $result); 
?> 

私はすべてのエラーを持っているかどうかを確認するために、次の行を追加しようとしたが、追加の出力が示されていない:

ini_set("display_errors", "1"); // shows all errors 
ini_set("log_errors", 1); 
ini_set("error_log", "/tmp/php-error.log"); 
error_reporting(E_ALL); 
ini_set('display_errors', 'on'); 

これを解決する方法は?なぜこれはまったく現れますか?私はそれがWordPressに関係しているかどうか分からないが、WHERE [email protected]を追加するだけで機能が壊れてしまったので、アイデアが不足している。

+0

メールのバッキングを使用しているのは、列名のためのバッククォートです。だから、mysqlはメールアドレスがカラム名だと思っています。一重引用符を使用してください。電子メール – scaisEdge

+0

これは重複としてマークされています。私は実際に "複製"への参照がOPを助けるとは考えていません。 *答え*はほぼ同じ答えですが、*質問*は全く異なります。 –

答えて

2

これはコメントには長すぎます。

あなたのクエリがエラーを持っています

SELECT COUNT(*) as count 
FROM mytable -- simplified for illustration 
WHERE `email` = `[email protected]` 

あなただけのデータベースに対してこのクエリを実行した場合、それは[email protected]のようなものが有効な列またはそのような何かではないと言うでしょう。

したがって、最初のアドバイスはクエリをテストすることです。

第2に、問合せをパラメータ化する場合(正しいことです)、この問題は発生しません。パラメータ値を使用してクエリを処理すると、構文上の問題(SQLインジェクションの脆弱性だけでなく)を解決することが難しくなります。

+0

*お探しの質問にエラーがあります:* - 申し訳ありませんが、これはエラーですか? –

+0

これを実行して、エラーの内容を確認します。ヒント:電子メール名の周りに引用符はありませんが、それは適切な解決策ではありません。 –

+0

ああ、バッククォートではなく引用符で囲みます。ありがとう!ピー!私はデータベースに直接アクセスすることはできず、データベースと通信するためにPHPスクリプトのみを使用しています。将来どのようにこのようなエラーをチェックするか考えていますか?もう一度、ありがとう! –

関連する問題