无法使用php执行查询,而在phpmyadmin中相同的查询可以正常工作

iaqfqrcu  于 2021-06-20  发布在  Mysql
关注(0)|答案(4)|浏览(384)

我正在尝试从表中删除行…我正在使用以下代码:

$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变量,我会得到:

mhd8tkvw

mhd8tkvw1#

尝试根据sql驱动程序转义会话变量。mysql示例如下。

$query = "DELETE FROM `usertour` WHERE `tourID` = '".$idnum."' AND `name` LIKE '%".mysql_real_escape_string($session)."%' ";
gcmastyq

gcmastyq2#


php会把你的句子转换成mysql,所以你可以试试:$query=“delete from usertour where tourid=$idnum,name like%{$session}%”;

wxclj1h5

wxclj1h53#

唯一可靠的方法是准备好的陈述。根据所使用的数据库驱动程序层的不同,它们的播放方式略有不同( 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 ]);
i2byvkas

i2byvkas4#

您已经根据图片向$session变量添加了空格。
另外,根据您的示例,您不需要使用like和通配符。

相关问题