插入变量时mysqli查询无效

时间:2011-01-16 09:48:53

标签: php mysqli

我需要一双额外的眼睛!我有一个超级简单的查询:

$result = $mysqli->query("SELECT post_id FROM blog_posts WHERE post_uri = 'the-test-post' LIMIT 1");
$row = $result->fetch_array();

这给了我post_id。但是,如果我为post_uri插入变量,则结果为空。我试过的方法没有用:

$result = $mysqli->query("SELECT post_id FROM blog_posts WHERE post_uri = '".$post_uri."' LIMIT 1");


$result = $mysqli->query("SELECT post_id FROM blog_posts WHERE post_uri = ".$post_uri." LIMIT 1");


$result = $mysqli->query("SELECT post_id FROM blog_posts WHERE post_uri = $post_uri LIMIT 1");

我在另一个工作正常的页面上有类似的查询,这让我更加困惑。帮助赞赏。

3 个答案:

答案 0 :(得分:4)

您正在将变量直接打包到查询中。这很容易出错(正如您所发现的那样),并且您很有可能无法对其进行充分的消毒(从而导致SQL注入漏洞)。

使用the PDO layer and bound variables

答案 1 :(得分:3)

如果您将该查询放入字符串并回显它,您可以检查发生了什么。该变量可能有问题!

echo "SELECT post_id FROM blog_posts WHERE post_uri = '".$post_uri."' LIMIT 1";

等等。我敢打赌,没有什么,或者你在$ post_uri中没有想到的东西,因为对于你构建查询的mysql 如何并不重要。

答案 2 :(得分:0)

我有类似的问题。你的语法看起来很好。尝试使用简单版本的 数据库连接调用。下面将比较一下工作的版本(上图) 失败了(下面)。

$sqli = new mysqli('localhost', 'my_user', 'my_password', 'my_db');
$mysqli->real_connect('localhost', 'my_user', 'my_password', 'my_db')

我在查询中使用了一个变量并且有$mysqli->real_connect db连接。 那不行。但当我切换到new mysqli类型时,我感到很惊讶 变量查询确实有效。

我希望能帮到你。