MYSQL语句没有正确回显

时间:2013-08-01 10:56:16

标签: php mysql

我有以下sql语句..

$sql = "select tableid, comment, ID, description from reservations 
        where uniqueid = '" . $reservationid . "'";

$ reservationid通过POST表单传递。选择了不同字段的非常相似的语句似乎在另一页上正常工作。但是当我在页面上回显sql语句时,我得到了

select tableid, comment, ID, description 
from reservations 
where uniqueid = '51e5f949c1828'

似乎跳过最后的单引号

我也试过

$sql = "select tableid, comment, ID, description from reservations 
        where uniqueid = '$reservationid'";

具有相同的结果。如果我查看页面源,我无法理解为什么我会看到这个..

select tableid, comment, ID, description from reservations 
where uniqueid = '51e5f949c1828</form

究竟哪个流浪</form>部分来自?

5 个答案:

答案 0 :(得分:1)

您的表单中似乎有一些错误。发送的数据填写不正确,因此表单html的一部分随之发送。没有你发布数据的发送方式,真的无法分辨。 您必须更正此问题才能使代码生效。

您提交的PHP没有任何问题,但它是SQL注入攻击的简单目标等。因此最好使用例如sprintf。 http://php.net/manual/en/function.sprintf.php

答案 1 :(得分:1)

  

但是当我在页面上回显sql语句时,我得到了

select tableid, comment, ID, description from reservations where uniqueid = <'51e5f949c1828 

如果您“回显”到浏览器窗口,浏览器很可能会从显示屏中静默删除</form>。我的下注是您在显示查询时查看网页的源代码,您也会看到... where uniqueid = '51e5f949c1828</form>

您确定$reservationid包含您的期望吗?

请你再展示一些代码。喜欢你的html表单?某处可能存在格式错误的html和/或未公开的引号。


顺便说一句,你不应该在查询中直接从不受信任的来源注入变量。这会导致SQL injection

答案 2 :(得分:0)

使用sprintf() - 这是组合字符串这类事情的更好方法。

答案 3 :(得分:0)

我认为你的单引号和双引号混在一起。

$sql = "select tableid, comment, ID, description from reservations where uniqueid = "' . $reservationid . '"";

答案 4 :(得分:0)

您也可以像这样进行查询

$sql = "select tableid, comment, ID, description 
       from reservations where uniqueid = '$reservationid'";

或只是

$sql = "select tableid, comment, ID, description 
        from reservations where uniqueid = $reservationid ";