从MySQL数据库中删除记录

时间:2011-06-26 14:04:16

标签: php mysql

我没有很多MySQL的经验,所以很有可能我错过了一些非常明显的东西。

我只是想从(from_=neighbor and to_=id) OR (from_=id and to_=neighbor)的表中删除记录。问题是记录永远不会被删除。

  1. 基本数据库设置(用户名,密码等)是正确的,实际上是我多次使用的包含文件。
  2. 表的名称是正确的,我进行了三次检查。
  3. 数据库中列的名称是正确的,我进行了三次检查。
  4. 我知道脚本正在按照javascript alert测试接收id和邻居,并且我知道收到的特定整数与数据库中的记录匹配(我已经三次检查)。
  5. 这是我正在使用的代码:

     $dbhost = "..."; 
     $dbuser = "...";
     $dbpass = "...";
     $dbname    = "...";
    
    $conn = mysql_connect($dbhost, $dbuser, $dbpass) or die ("Error connecting to mysql");
        mysql_select_db($dbname);
    
    $id = mysql_real_escape_string($_GET['id']);
    $neighbor = mysql_real_escape_string($_GET['neighbor']);
    $result = mysql_query("DELETE FROM jointable WHERE to_='". $id ."' AND from_='".$neighbor."'") or die(mysql_error()); 
    $result = mysql_query("DELETE FROM jointable WHERE from_='". $neighbor ."' AND to_='".$id."'") or die(mysql_error()); 
    mysql_close($conn);     
    
    echo "<script type='text/javascript'>
        alert('$id');
        alert('$neighbor');
        <!-- 
        window.location = 'index.php?node=$id';   
        //-->
        </script>";
    

1 个答案:

答案 0 :(得分:0)

将查询构建为单独的字符串,然后将其转储以查看实际情况:

$sql = <<<EOL
DELETE FROM jointable
WHERE (to_ = '$id') AND (from_ = '$neighbor')
EOL;
$result = mysql_query($sql) or die(mysql_error());

die("<pre>$sql</pre> $result");

请注意,我只运行一次查询。您的两个查询只是重新排列WHERE子句,这是毫无意义的。在这种情况下,(P and Q)(Q and P)完全相同。

一旦您获得了查询文本,请尝试在MySQL监视器中自己手动运行它,看看发生了什么。将其转换为具有相同WHERE子句的SELECT查询,例如

SELECT *
FROM jointable WHERE (to_ = '$id') AND (from_ = '$neighbor')

并查看是否返回任何内容。由于MySQL不会在查询中吐出错误,因此很可能是你的WHERE子句导致它无法找到你想要的记录。