【自分用】MySQLで結果に何も返されない時のチェック項目【備忘録】
phpでMySQLのクエリーを出したのに、結果がからっぽ・・・。いつもと同じ描き方してるのに何でだろう?
なんて時に自分のコードを見直すチェック項目です。
SELECTをWHEREで条件を絞る時に使用する変数が、数値なのか文字列なのか?
$query = 'SELECT fullname FROM ' . $table_name . ' WHERE name="' . $name . '";';
上記コードはデータベースから情報を貰う場合の条件として name カラムに特定の文字列が一致した場合の条件でクエリーを送信するコードになりますが、これは$nameに代入された値が文字列の場合はこのようになります。
$query = 'SELECT fullname FROM ' . $table_name . ' WHERE id=' . $id . ';';
こちらは、検索条件(id)に数値を使用している場合です。前者のコードと見比べるとダブルクォーテーション(”)の有無が確認できると思います。
前回描いたコードをそのままコピーペーストで持ってきた場合に陥りやすいと思います。
関数内でクエリーする場合にはグローバル宣言が必要
function function_name($id) { global $db_connecti; $query = 'SELECT fullname FROM ' . $table . ' WHERE name="' . $id . '";'; $db_connecti = mysqli_connect($servername, $username, $password, $database); $result = mysqli_query($db_connecti, $query); $temp_array = mysqli_fetch_assoc($result); return $temp_array['fullname']; }
データベースへクエリーを行う位置が関数内になる場合は、接続関数をグローバル宣言しなければなりません。
クエリーを行う手前でmysqlをcloseしていた
$db_close = mysqli_close($db_connecti); /*...略...*/ $query = 'SELECT fullname FROM ' . $table . ' WHERE name="' . $id . '";'; $db_connecti = mysqli_connect($servername, $username, $password, $database); $result = mysqli_query($db_connecti, $query); $temp_array = mysqli_fetch_assoc($result); echo $temp_array['fullname'];
動くわけないですね・・・。でも昔描いたコードの下に追記していった場合に良く陥る罠です。これに気付かず、延々自分の描いたコードの見当違いなところを睨めっこなんてことが良くあります。
とりあえず今度MySQLのクエリー関係で同じような事例が出たら、このページを開いてチェックを行うことにします。
自分用備忘録でした。
- 2015年10月1日
- php
- コメントはまだありません