-1

重複の可能性: mysql_fetch_array() はパラメーター 1 がリソースであると想定し、select mysql_fetch_assoc()
で指定されたブール値はパラメーター 1 がリソースであると想定しています

あるテーブルから単一のフィールドを取得して、別のテーブルに追加しようとしています。

MySQL/PHP を使用して 3 日目なので、少し問題があります。
PHP はリソースを予期してエラーをスローしますが、文字列が指定されました。
これは、1 つのテーブルから自動インクリメントされた ID フィールドです。

基本的には姓と名が一致するIDを引っ張ってきます。

$query5 = "SELECT FROM ".$db_prefix."customer_det (`id`) 
WHERE fname = '".$fname."' 
AND lname = '".$lname."'";

$result5 = mysql_query($query5);
while($row = mysql_fetch_assoc($result5)){
$uid = $row['id'];
echo "$uid";
}

エラー:

警告: mysql_fetch_assoc() は、パラメーター 1 がリソースであると想定しています。ブール値が指定されています

4

6 に答える 6

4
$result5 = "mysql_query($query5)";
           ^                    ^

引用符を削除します。

使用した場合var_dump($result5);、それはstring. その理由は、二重引用符または単一引用符で囲まれたものはすべて、PHP では文字列として扱われるためです。

また、次のようなエラーを処理する必要があります。

$result5 = mysql_query($query5) or die(mysql_error());

失敗mysql_queryすると返さfalseれるため

文字列表現に興味がある場合は、マニュアルをご覧ください。

また、クエリに構文エラーがあります。データベースから取得する列がありません:

$query5 = "select from ".$db_prefix."customer_det (`id`) where fname = '".$fname."' and lname = '".$lname."'";
                 ^

後に追加*(または列の名前)select

注: mysql_*関数は非推奨です。代替手段は次mysqli_*のとおりです。PDO

于 2012-10-19T12:27:38.527 に答える
1
$query5 = "select from ".$db_prefix."customer_det (`id`) where fname = '".$fname."' and lname = '".$lname."'";
$result5 = mysql_query($query5);
while($row = mysql_fetch_assoc($result5)){
  $uid = $row['id'];
  echo "$uid";
}
于 2012-10-19T12:28:05.630 に答える
0

変化する -

$result5 = "mysql_query($query5)";

$result5 = mysql_query($query5);
于 2012-10-19T12:28:24.143 に答える
0

これを使って

$result5 = mysql_query($query5);

これの代わりに

$result5 = "mysql_query($query5)";
于 2012-10-19T12:30:03.643 に答える
0

idクエリから選択したフィールド ( ) の名前がありません:

$query = "SELECT id FROM {$db_prefix}customer_det WHERE fname = '{$fname}' AND lname = '{$lname}'";
$result = mysql_query($query);
while($row = mysql_fetch_assoc($result)){
    echo $row['id'];
}
于 2012-10-19T13:15:02.803 に答える
0

エラーをスローしている行は次の行であると推測します。

while($row = mysql_fetch_assoc($result5)){

この関数mysql_fetch_assocは、SQL クエリの結果を渡す必要があり、それらの結果からフェッチする必要があるという点で、「リソースを期待」しています。ただし、$result5SQL クエリではなく、文字列です。

$result5 = "mysql_query($query5)";

なぜその周りに引用符を付けるのかわかりませんが、実際にそのコードを解釈させたい場合は、そこに引用符を付けたくありません:

$result5 = mysql_query($query5);

これにより、mysql_query関数が実行され、その戻り値 (リソース) が に配置され$result5ます。


では、もっと重要なことを...

何よりもまず、コードはSQL インジェクション攻撃に対して無防備です。これについては知っておくべきことがたくさんあり、単一のスタック オーバーフローの回答ではカバーできません。したがって、SQL クエリを作成するために、ユーザー入力値の生の文字列連結を決して使用てはならないということで、概念を要約しようと思います。ユーザーは悪意のある入力を入力してクエリを変更し、データベースへのアクセスを効果的に取得できます。データベースが昇格された権限で実行されている場合、サーバー上のより多くのものにアクセスできます。

基本的に、常に入力をサニタイズし、ユーザーからの入力を暗黙的に信頼しないでください。

次に、関数を使用しないでくださいmysql_mysqli_これらは、先ほど述べた SQL インジェクションとまったく無関係ではないという理由で 、関数に置き換えられました。それらのドキュメントページには、これが非常に明確に記載されています。

于 2012-10-19T12:34:08.013 に答える