2017-02-17 5 views
-1

私はMySQLデータベースを持っていますが、私の機能は動作していません。私はデータベースクエリの結果がどれくらいあるかを知りたいが、何も戻ってこない、0でもない。同じ結果を$values->num_rows;も試した。数...ただ何を取り戻すしないでくださいNum_rowsは機能しませんか?

マイコード:

$values = $database->query("SELECT * FROM `wp_all_import_xml` WHERE name = '$title' AND price = '$price' AND shop = '$shop' AND link = '$link'"); 

$count_values = mysqli_num_rows($values); 

echo "ERROR by detecting Product (More than 1 Row return by SQL!): " .$title. " Preis: " .$price. " Shop: " .$shop. " Link: " .$link. "\t num_rows: " .$count_values. "\n"; 

どのように私は私が返されます行の量を得ることができますか?

グリーティング

+3

エラー報告をオンにします。 –

+2

"get nothing back"は、 'echo'文は正常に実行されますが、' $ count_values'変数は空であることを意味しますか?他の変数には何がありますか? *具体的に何が起こるのですか?あなたのコードはSQLインジェクションにもオープンしているので、実際に実行しているSQL文も実際にはわかりません。 – David

+0

ええ、私は値を表示されていません... - しかし、SQL文は重要ではありません...私はSQL文が間違っていても0を返すべきです... – Jan

答えて

1

mysqli_num_rows関数が機能します。

観察された動作の最も一般的な説明は、エラーが発生し、無視されていることです。

これをデバッグするには、まずエラー報告が有効になっていることを確認してください。

クエリからの戻りを確認するコードを変更します。条件付きテストを実行して、FALSEを戻していないことを確認します。

if ($values = $mysqli->query(...)) { 
    // query returned a resultset 
} else { 
    // query returned FALSE 
} 

検索する必要があるのは行数だけであれば、SELECTリストでCOUNT(*)を使用できます。

if ($res = $mysqli->query("SELECT COUNT(*) AS cnt FROM ... ")) { 

クエリが成功した場合は、カウントがゼロであっても行が返されます。そして、我々は簡単に私たちは、それを前提とするつもりだ

など、

を、我々は他のクエリからの結果を処理するようnum_rowsでマックを必要とせずに、結果を処理し、クエリがバッファ付きまたはバッファなしているかどうかを心配することができます$databaseはmysqli接続であり、コードにはmysqli_num_rows関数の呼び出しが含まれているため、PDO接続ではありません。それがPDO接続の場合、 "num_rowsは機能しません"。


質問のコードは、SQLインジェクションの影響を受けやすいコードでよく見られるパターンに従います。 (この抜粋では、SQLテキストに含まれる変数の値が危険な可能性があるかどうか判断できないため、脆弱かどうかはわかりません)

プレースホルダをバインドすると、わかります。
バインドプレースホルダでprepared statementを使用します。それは難しくありません。

+0

私はすでに解決策を得ました。私はエラーを返す。私の質問は今何ですか、何かが見つからなかったり、何か他のことが間違っていたら、私はエラーを返しますか? phpMyAdminで値を手動でチェックしたところ、SELECTクエリの値が1つ戻ってきたので – Jan

+0

空の結果セットを正常に実行して返すクエリはエラー条件ではありません.MySQL、SQL、mysqliの点では完全です0行を返すクエリを実行するのに有効です。結果セットは空になります。それは有効です。カウントを持つ行を実際に取得したい場合は、 'SELECT COUNT(*)'クエリを使用してください。通常、大規模な結果セットをクライアントに返すより効率的です。 – spencer7593

+0

'$ database-> error'でクエリをチェックしてエラーが発生しました。不正な行名を使用しました。 – Jan

関連する問題