无法使用PHP执行查询,其中相同的查询在phpmyadmin

时间:2018-05-21 15:17:52

标签: javascript php mysql sql phpmyadmin

我正在尝试从表中删除行...我正在使用此代码:

$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%',我试图修复但我不能。

任何帮助?

enter image description here

这里有一些数据库......我连接到正确的数据库,因为我在几个地方使用php和mysql,除了这个......问题只出在'%$ session%'...其他一切都运行良好,它执行查询但不能匹配名称。

如果我输出$ idnum,$ session和$ query变量,我得到这个:

enter image description here

4 个答案:

答案 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)

enter image description here
php会将你的句子转换为mysql     所以你可以尝试这个:     $ query =“从usertour中删除,其中tourID = $ idnum并且名称LIKE%{$ session}%”;