[解決済み] mysql_fetch_array()/mysql_fetch_assoc()/mysql_fetch_row()/mysql_num_rows etc. は、パラメータ 1 がリソースであることを期待する。
2022-03-23 15:15:35
質問
MySQLのテーブルからデータを選択しようとしているのですが、以下のエラーメッセージのいずれかが表示されます。
mysql_fetch_array() expects parameter 1 to be resource, boolean given.
これは私のコードです。
$username = $_POST['username'];
$password = $_POST['password'];
$result = mysql_query('SELECT * FROM Users WHERE UserName LIKE $username');
while($row = mysql_fetch_array($result)) {
echo $row['FirstName'];
}
解決方法は?
クエリがさまざまな理由で失敗することがありますが、その場合は mysql_* と mysqli 拡張モジュールの両方が以下を返します。
false
は、それぞれのクエリ関数/メソッドから返されます。そのようなエラー状態をテストし、それに応じて処理する必要があります。
ノート は mysql_ 関数は非推奨です。 で、php バージョン 7 で削除されました。
確認事項
$result
に渡す前に
mysql_fetch_array
. あなたは、それが
false
はクエリに失敗したからです。を参照してください。
mysql_query
のドキュメントで、 可能な戻り値とその対処法を参照してください。
$username = mysql_real_escape_string($_POST['username']);
$password = $_POST['password'];
$result = mysql_query("SELECT * FROM Users WHERE UserName LIKE '$username'");
if($result === FALSE) {
die(mysql_error()); // TODO: better error handling
}
while($row = mysql_fetch_array($result))
{
echo $row['FirstName'];
}
mysqli 拡張
プロシージャルスタイル
:
$username = mysqli_real_escape_string($mysqli, $_POST['username']);
$result = mysqli_query($mysqli, "SELECT * FROM Users WHERE UserName LIKE '$username'");
// mysqli_query returns false if something went wrong with the query
if($result === FALSE) {
yourErrorHandler(mysqli_error($mysqli));
}
else {
// as of php 5.4 mysqli_result implements Traversable, so you can use it with foreach
foreach( $result as $row ) {
...
ooスタイル :
$username = $mysqli->escape_string($_POST['username']);
$result = $mysqli->query("SELECT * FROM Users WHERE UserName LIKE '$username'");
if($result === FALSE) {
yourErrorHandler($mysqli->error); // or $mysqli->error_list
}
else {
// as of php 5.4 mysqli_result implements Traversable, so you can use it with foreach
foreach( $result as $row ) {
...
プリペアド・ステートメントを使用する。
$stmt = $mysqli->prepare('SELECT * FROM Users WHERE UserName LIKE ?');
if ( !$stmt ) {
yourErrorHandler($mysqli->error); // or $mysqli->error_list
}
else if ( !$stmt->bind_param('s', $_POST['username']) ) {
yourErrorHandler($stmt->error); // or $stmt->error_list
}
else if ( !$stmt->execute() ) {
yourErrorHandler($stmt->error); // or $stmt->error_list
}
else {
$result = $stmt->get_result();
// as of php 5.4 mysqli_result implements Traversable, so you can use it with foreach
foreach( $result as $row ) {
...
これらの例は、あくまで例です。
何
を行うべきであり、その方法ではない(エラー処理)。プロダクションコードでは
or die
を出力すると、少なくとも無効なHTMLが生成されます。また、データベースのエラーメッセージは、管理者でないユーザーには表示しないようにしましょう。
情報公開が多すぎる
.
関連
-
[解決済み】接続の取得に失敗しました: php_network_getaddresses: getaddrinfo failed: 名前またはサービスが不明
-
[解決済み】PHPで空の値からデフォルトオブジェクトを作成する?
-
[解決済み】空の配列要素を削除する
-
[解決済み】++と*+の意味は何ですか?
-
[解決済み】mysqli_result クラスのオブジェクトを文字列に変換できない
-
[解決済み】PDOException SQLSTATE[HY000] [2002] そのようなファイルまたはディレクトリがありません。
-
[解決済み】PHPのクラスが見つからないが、インクルードされている
-
phpのAllowed memory size of 134217728 bytes枯渇問題の解決法
-
[解決済み】phpのシンタックスエラー、予期しないT_IFエラーを修正する方法は?[クローズド]。
-
[解決済み] mysql_field_nameを新しいmysqliに変更します。
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】Fatal error: 未定義の関数 sqlsrv_connect() を呼び出した。
-
[解決済み】DateTimeクラスのオブジェクトを文字列に変換できない
-
[解決済み】pdo - 非オブジェクトのメンバー関数prepare()への呼び出し【重複】。
-
[解決済み】警告:mysql_fetch_array()はパラメータ1がリソースであることを期待、ブール値は[重複]で与えられる]
-
[解決済み】mysqli_select_db()は、パラメータ1がmysqliであることを期待し、文字列が与えられる。
-
[解決済み] * vchiqインスタンスを開くのに失敗しました。
-
[解決済み】In_arrayが動作しない。
-
[解決済み】警告: file_get_contents(): https:// ラッパーがサーバー構成ですべて無効になっています。
-
[解決済み] libapache2-mod-php7 パッケージの場所がわからない
-
[解決済み] このエラーを防ぐには : Warning: mysql_fetch_assoc() expects parameter 1 to be resource, boolean given in ... on line 11 [duplicate] [ 警告: mysql_fetch_assoc() は、パラメータ 1 がリソースであることを期待します。