我正在尝试从表中删除行...我正在使用此代码:
$query = "Delete from usertour where tourID = $idnum and name LIKE '%$session%' ";
如果idnum和session正确
,它永远不会删除该行我尝试以这种方式在phpmyadmin中执行相同的查询:
Delete from usertour where tourID = 1 and name LIKE '%test@hotmail.com%'
当我这样执行时它起作用......问题可能在这部分'%$ session%',我试图修复但我不能。
任何帮助?
这里有一些数据库......我连接到正确的数据库,因为我在几个地方使用php和mysql,除了这个......问题只出在'%$ session%'...其他一切都运行良好,它执行查询但不能匹配名称。
如果我输出$ idnum,$ session和$ query变量,我得到这个:
答案 0 :(得分:1)
您已根据图片为$ session变量添加了空格。
另外,根据你的例子,你不需要使用LIKE和通配符。
答案 1 :(得分:1)
唯一可行的方法是准备好陈述。根据您使用的数据库驱动程序层(mysqli
vs PDO),这些播放的方式略有不同,但看起来通常如下:
$stmt = $db->prepare("DELETE FROM usertour WHERE tourID=? AND name=?");
然后在执行该查询之前绑定这两个值。请注意,此处使用的是name=?
,因为LIKE
适用于足够接近的情况,这是您不想要的。如果使用LIKE
,那么您将删除name@example.com
以及name@example.com.au
两个完全不同的电子邮件地址。
如果您的电子邮件字段中有空格,那么您使用
LIKE
来忽略这是一个脏数据问题,您必须清理数据。不要通过分层LIKE
这样的黑客来使情况变得更糟。
如果您的输入中出于任何原因有空格,请在使用trim
函数执行查询之前删除它们:
$session = trim($session);
执行查询时,您会为mysqli
执行以下操作:
$stmt->bind_param("is", $idnum, $session);
$stmt->execute();
或PDO的这个:
$stmt->execute([ $idnum, $session ]);
答案 2 :(得分:-2)
尝试按照sql驱动程序转义会话变量。 MySQL示例如下。
$query = "DELETE FROM `usertour` WHERE `tourID` = '".$idnum."' AND `name` LIKE '%".mysql_real_escape_string($session)."%' ";
答案 3 :(得分:-2)