PHP 删除查询不起作用,甚至没有收到任何错误消息

PHP Delete Query is Not working and even not getting any error message

我想从 mst_user table 中删除我的用户。但删除查询不起作用它显示用户已删除但未从数据库中删除的消息。
这是Users.php

       include("database.php");
       $rs = mysql_query("select * from  mst_user ORDER BY user_id ASC")
       or die(mysql_error());

       echo "<h1 align=center>Users Detail</h1>";

       <table border="1" align="center" class='table'>
        <tr>
        <th align="center"> ID Number </th>
        <th align="center"> Email </th>
        <th align="center"> Username </th>
        <th align="center"> Delete User</th>         
        </tr>

        <?php
        while ($row = mysql_fetch_array($rs)) {
        ?>
        <tr>

            <td align=center> <?php echo $row['user_id']?> </td>
            <td align=center> <?php echo $row['email']?> </td>
            <td align=center> <?php echo $row['username']?> </td>                
            <td aling=center"><a href="delete.php?user_id=<? echo 
            $row['user_id'];?>"><img src="image1/delete.png"></a> </td></tr>
            <?php
              }
           echo "</table>";
           }
          ?>

这是Delete.php

              $user_id=$_GET['user_id'];
              include "database.php";

              $sql="delete from mst_user where user_id='$user_id'";
              $result="mysql_query($sql)" or die("error");

              if($result){
              echo "<h3>User has been Deleted</h3>";
               }
              else{ 
              echo "not delete";
              }
              ?>

这一行是问题所在:

$result="mysql_query($sql)" or die("error");

应该是

$result=mysql_query($sql) or die("error");

你用引号把它变成了一个字符串。

也像其他人所说,mysql_* 已弃用,请改用 PDO 或 MySQLi。

PDO 示例和问题的解决方案

PDO

进一步更新您的代码:PDO 是一种更安全的查询方式。 mysql 查询已弃用。它们不应该再被使用了。

用以下代码替换您的数据库调用:

function openDBConnection()
{
    $name = "xxxxxx";
    $pw = "xxxxxx";
    $server = "xxxxxxx";

        $dbConn = new PDO("mysql:host=$server;dbname=xxx", $name, $pw, , array( PDO::ATTR_PERSISTENT => false));
    }
    catch( PDOException $Exception ) 
    {   
         echo "Unable to connect to database. ";
    }       
    return $dbConn;
}
function doPDOQuery($sql, $type, $var = array())
{
    $db = openDBConnection();
    $db->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION );
    if ($type == "prepare")
    {
        $queryArray = $var;
        $sth = $db->prepare($sql, array(PDO::ATTR_CURSOR => PDO::CURSOR_FWDONLY));
        $sth->execute($queryArray);
    }
    else if ($type == "query")
    {
        $sth = $db->query($sql);
    }
    else
    {
        echo "Supplied type is not valid.";
        exit;
    }

    if (!$sth)
    {
        $error = $db->errorInfo();
        echo $error;
        exit;
    }

    return $sth;
}

您可以使用这些函数对数据库进行 PDO 查询。第一个函数打开数据库连接,而第二个函数实际执行查询。您不需要调用第一个函数。它在第二个中被调用。

基于您的代码的示例:

$sql = "delete from mst_user where user_id= :id"
$sql_result = doPDOQuery($sql, 'prepare', array(":id" => $user_id));

if ($row = $sql_result->rowCount() > 0 )
{
    echo "<h3>user was deleted.</h3>";
}

PDO 的工作方式如下:PDO 不是将 php 变量传递到 SQL 字符串(并冒着 SQL 注入的风险),而是传递 SQL 字符串和变量到数据库,让数据库的驱动程序构建查询字符串。

PDO 变量可以按名称或按索引声明:

  • 按名称:使用: 声明命名变量。 SELECT * FROM TABLE WHERE id = :id。每个密钥必须是唯一的。
  • 按索引:使用?声明一个索引变量。 SELECT * FROM TABLE WHERE id = ?

需要将包含变量的数组传递给 PDO。

命名数组:

 array(":id" => 1);

索引数组:

 array(1);

使用命名数组,您不必担心变量的顺序。

使用 fetchfetchAll 函数检索结果。 fetch returns 一行。而 fetchAll returns 一个包含所有行的数组。

http://php.net/manual/en/book.pdo.php