0

我已经被困了一段时间,我确信这是一个简单的解决方法,但我就是找不到答案。

我正在尝试删除表中的一行,但我放入查询中的变量未被识别。在下面的 $remove 查询中,如果我输入与行对应的数字,则查询可以正常工作,但是当我使用变量时它不会。

if (isset($_POST['remove']))
{

 $remove = $_POST['remove'];
 //echo $remove; print the number entered

 $query ="DELETE dogid FROM regdogs WHERE dogid = $remove ";
 if($query_run = mysql_query($query)){
 $query_num_rows = mysql_num_rows($query_run);

 if($query_num_rows==1)
      echo 'Entry removed ';
 else
      echo 'Not removed ';  
 }

谢谢

4

4 回答 4

7
$query ="DELETE FROM regdogs WHERE dogid = $remove ";

尝试这个。这只是一个语法错误。

同样,请转到mysqli_方法。mysql_方法已弃用。

于 2013-03-24T16:38:43.383 回答
1

我希望这是一个可以接受的答案——因为你的问题是如何向查询中添加参数,我觉得它是相关的。

如果只添加$remove, 即$_POST['remove'],您将允许用户执行任意 SQL 命令。想象一下有人发布1 OR 1=1为参数。您的 SQL 查询会说DELETE dogid FROM regdogs WHERE dogid = 1 OR 1=1并删除整个表。相反,mysql_real_escape_string在处理用户输入时始终使用。您的整个代码如下所示:

if (isset($_POST['remove']))
{

 $remove = mysql_real_escape_string($_POST['remove']);
 //echo $remove; print the number entered

 $query ="DELETE FROM regdogs WHERE dogid = $remove ";
 if($query_run = mysql_query($query)){
 $query_num_rows = mysql_num_rows($query_run);

 if($query_num_rows==1)
      echo 'Entry removed ';
 else
      echo 'Not removed ';  
 }

(当然,大家都说mysql_*已经过时了,这绝对是对的。我假设你刚刚开始使用PHP。由于大多数教程仍然使用mysql_*,所以现在绝对没问题。一旦你更熟悉了它,考虑切换到 mysqli 或 PDO。)

于 2013-03-24T16:45:08.920 回答
0

查询应修改为

DELETE FROM regdogs WHERE dogid = $remove

尝试打印查询

echo $query;

发布结果。

于 2013-03-24T16:41:45.747 回答
0

我想你只需要这个:

 $query ="DELETE FROM regdogs WHERE dogid = $remove ";
于 2013-03-24T16:41:58.773 回答