このスクリプトを実行すると、次のエラーが発生します。
警告:mysqli_num_rows()は、パラメーター1がmysqli_resultであると想定しています。ブール値は...で指定されます。この行:if(mysqli_num_rows($ result3)> 0){
何が問題なのか分かりますか?
if (isset($_POST['submit']))
{
$sql = "SHOW COLUMNS FROM Work";
$result = mysqli_query($con,$sql);
while($row = mysqli_fetch_array($result)){
$tempname = $row['Field'];
$sql2 = "UPDATE Work SET `".$row['Field']."`= '$_POST[$tempname]' WHERE ID='".$_GET["id"]."' AND Date='".$_GET["date"]."'";
$result2 = mysqli_query($con,$sql2);
if ($con->query($sql2) === TRUE) {
} else {
echo "Error: " . $sql2 . "<br>" . $con->error;
}
}
$sql3 = "SELECT * FROM Work WHERE ID='".$_GET["id"]."' AND (".$row['Field']." NOT LIKE '".$_POST[$tempname]."')";
エラー:
警告:mysqli_num_rows()は、パラメーター1がmysqli_resultであると想定しており、ブール値が指定されています
ほとんどの場合、クエリを実行しようとして何らかの理由で失敗したためですが、とにかく盲目的に続行しました。
失敗すると、はではなくmysqli_query
falseを返しmysqli_result
ます。その後false
、のようなブール値を使用しようとするとmysqli_num_rows
、まさにエラーが表示されます。
最初のポイントとして、失敗する可能性のある関数の戻り値を常にチェックする必要があります。これは良い習慣です。盲目的に続けて最高のものを期待することは、実際には堅牢なコードを作成する方法ではありません。
そうは言っても、クエリが失敗した理由に進む必要があります。クエリを実行する前にクエリを出力するだけで、SQLの問題の大部分が明らかになります。コメントの1つにクエリが次のように記載されているため、最終的にこれを行ったようです。
SELECT * FROM Workhours WHERE AFNumber='AF1475' AND ( NOT LIKE '')
これは有効なSQLステートメントではないため、問題が発生します。さて、それは(あなたの質問の以前の編集は、別のテーブル名を使用しているように見えるにもかかわらずやっ一致するテーブル名を持っている)、それはあなたに密接に対応$sql3
変数1:
$sql3 = "SELECT * FROM Work WHERE ID='".$_GET["id"]."' AND (".$row['Field']." NOT LIKE '".$_POST[$tempname]."')";
したがって、どちら$row['Field']
も$_POST[$tempname]
実際には何にも設定されていないように見えます。
それはあなたが彼らが設定されていない理由を正確に見つけるためにあなたの努力を集中する必要があるところです。
まず、行の処理が終了した$row[anything]
後に使用するのは賢明ではないようです。コードを機能させるには、そのコードをループ内に移動する必要があるかもしれませんが、それ以上の情報やコンテキストがなければ、それは実際には単なる推測です(知識に基づいた推測ですが)。
1それが正しいクエリではない場合(私はそれがではID
なくを使用していることに気づきましたAFNumber
)、問題はあなたが示したコード以外の場所にあります。ただし、問題を見つけるために使用される方法は同じままです。問題のあるクエリを見つけ、実行前に印刷してから、不正な形式である理由を突き止めます。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加