我已经在这个问题上停留了一段时间,我确信这是一个简单的解决方案,但我就是找不到答案。
我试图删除表中的一行,但我放入查询的变量未被识别。在下面的$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 ';
}
谢谢
$query ="DELETE FROM regdogs WHERE dogid = $remove ";
试试这个。这只是一个语法错误。
请再次移动到mysqli_ methods。mysql_方法已弃用。
我希望这是一个可以接受的答案-因为你的问题是如何向查询添加参数,我觉得它是相关的。
如果您只添加$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。
查询应该修改为
DELETE FROM regdogs WHERE dogid = $remove
try printing query
echo $query;
和
我想你只是需要这个:
$query ="DELETE FROM regdogs WHERE dogid = $remove ";