我已经坚持了一段时间,我确信这是一个简单的解决办法,但我找不到答案。
我正在尝试删除表中的一行,但是我正在查询的变量未被识别。在下面的$ 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 ';
}
由于
答案 0 :(得分:7)
$query ="DELETE FROM regdogs WHERE dogid = $remove ";
试试这个。这只是一个语法错误。
再次,请转到 mysqli _ 方法。不推荐使用 mysql _ 方法。
答案 1 :(得分: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。)
答案 2 :(得分:0)
查询应修改为
DELETE FROM regdogs WHERE dogid = $remove
尝试打印查询
echo $query;
和
发布结果。
答案 3 :(得分:0)
我想你只需要这个:
$query ="DELETE FROM regdogs WHERE dogid = $remove ";