-7

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

クエリが機能しているレコードを削除しようとしているときにこのエラーが発生しますが、この行はページに残ります。while に書かれた "Deleted" をエコーし​​たいのですが、while ループが機能していません。

 mysql_fetch_array() expects parameter 1 to be resource, boolean given in delete.php on line 27

delete.php

<html>
<body>
<form method="post">
Id : <input type="text" name="id">
Name : <input type="text" name="name">
Description  : <input type="text" name="des">
<input type="submit" value="delete" name="delete">
</form>
<?php 
include("connect.php");
 $id = $_POST['id'];
 $name = $_POST['name'];
 $des = $_POST['des'];

 $result = mysql_query("DELETE FROM fact WHERE id='$id'") or die(mysql_error());

 while($row = mysql_fetch_array($result))
  {

   echo "Deleted";
   }

 mysql_close($con);  ?>
 </body>
 </html>

connect.php

<?php 
  $con = mysql_connect("localhost","root","");
 if (!$con)
    {
    die('Could not connect: ' . mysql_error());
    }
   mysql_select_db("Dataentry", $con);
  ?>

whileループを機能させるにはどうすればよいですか..

4

7 に答える 7

2

問題は、deleteステートメントが結果セットを生成しないことです。

$result = mysql_query("DELETE FROM fact WHERE id='$id'") or die(mysql_error());
if (mysql_affected_rows() > 0)
{
    echo 'Record deleted!';
}

また、コメントで述べたように、SQLインジェクションに対して脆弱であり、非推奨の拡張機能も使用しています。これらの問題に関するガイダンスについては、このすばらしい投稿をご覧ください。

于 2012-12-14T10:21:04.247 に答える
1

コマンドを実行しDELETEても何も返されないと思うので、mysql_fetch_array()を実行することはできません。を実行している場合は、通常、これを使用しますSELECT。この場合、何かを削除しているので、そのループを削除して、echo()を実行します。

于 2012-12-14T10:20:53.560 に答える
0
    <html>
   <body>
    <form method="post">
      Id : <input type="text" name="id">
       Name : <input type="text" name="name">
   Description  : <input type="text" name="des">
     <input type="submit" value="delete" name="delete">
   </form>
   <?php 
    include("connect.php");
     $id = $_POST['id'];
     $name = $_POST['name'];
     $des = $_POST['des'];

   $result = mysql_query("DELETE FROM fact WHERE id='$id'") or die(mysql_error());

    if($result) //if(mysql_affected_rows($result) > 0)
    {

       echo "Deleted";
    }
    else
    {
        echo mysql_error();
    }

    mysql_close($con);  ?>
   </body>
    </html>
于 2012-12-14T10:28:05.943 に答える
0
$result = mysql_query("DELETE FROM fact WHERE id='$id'") or die(mysql_error());

if($result)
{
    echo "Deleted";
}
于 2012-12-14T10:44:59.373 に答える
0
  1. mysql_ *関数を使用せず、代わりにPDOまたはMysqliを使用してください。
  2. $idの値に注意してください。より詳しい情報
  3. SELECTクエリの戻り結果をフェッチするためにmysql_fetch_arrayを使用します。

あなたはこれが欲しいかもしれません

if(mysql_affected_rows()  > 0)
{
   echo "Deleted";
}
else
{
  echo "An error occured.";
}
于 2012-12-14T10:24:56.677 に答える
0

mysql_* 関数を使用しないでください。PDO の例を試してください

<?php
$dbh = new PDO('mysql:host=localhost;dbname=test', 'user', 'password');
$count = $dbh->exec("DELETE FROM fact WHERE id='$id'");
if($count > 0){
    echo 'Deleted';
}else{
    echo 'Not Deleted';
}
?>

$count は no を返します。の行が削除されました

于 2012-12-14T10:31:43.060 に答える
-1

いつか問題が発生するので、次のように使用します $ result = mysql_query( "DELETE FROM fact WHERE id ='$ id'");

于 2012-12-14T10:26:59.537 に答える