我需要一双额外的眼睛!我有一个超级简单的查询:
$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");
我在另一个工作正常的页面上有类似的查询,这让我更加困惑。帮助赞赏。
答案 0 :(得分:4)
您正在将变量直接打包到查询中。这很容易出错(正如您所发现的那样),并且您很有可能无法对其进行充分的消毒(从而导致SQL注入漏洞)。
答案 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
类型时,我感到很惊讶
变量查询确实有效。
我希望能帮到你。