从 php 运行时,查询在 phpmyadmin 中运行良好,返回 0 行
我真的被这个难住了。这是 php:
更新: 我已经转义了输入(在我以不同的方式执行此操作之前,但不知道 mysql_real_escape_string)。另外,我用单引号替换了双引号,但仍然出现同样的问题。以下是更新后的代码:
$request = mysql_real_escape_string($_POST['id']);
$colName = mysql_real_escape_string($_POST['col_name']);
function executeAssoc1($q)
{
$r = mysql_query($q) or die(mysql_error() . ' ' . $q);
$rass = mysql_fetch_assoc($r);
return $rass;
}
foreach(array_keys($_POST) as $pitem)
{
if($pitem == (...what I want it to...))
{
$pitem_name = mysql_real_escape_string(rawurldecode($pitem));
$qf = "SELECT * FROM possible_values WHERE table_id=$request AND col_name='$colName' AND value = '$pitem_name'";
$qfr = executeAssoc1($qf);
var_dump($pitem_name);
echo '<br>';
var_dump($qf);
echo '<br>';
var_dump($qfr);
}
}
以下是该代码在一个循环期间输出的部分内容:
string(37) "1 .新英格兰(东北地区)"
string(122) "SELECT * FROM possible_values WHERE table_id=3 AND col_name='DIVISION' AND value = '1 .新英格兰(东北地区)'"
布尔(假)
现在,当我将该查询复制到 phpmyadmin SQL 编辑器时,它实际上会返回结果。我什至尝试按照 此处 但发生了同样的事情(phpmyadmin 返回一行,php 返回 0 行)。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
从 rawurldecode() 的手册中:
如果您输出 mySQL 查询,我敢打赌您的字符串将如下
所示:按照手动输入的建议尝试 urldecode() 。
From the manual on rawurldecode():
if you output your mySQL query, I bet your strting will look something like this:
try urldecode() as the manual entry suggests.
你应该使用单引号而不是双引号,即:
you should use single quotes instead of double quotes, ie:
SQL 中的字符串不允许使用双引号,因为它们用于标识符(如 MySQL 使用反引号“`”)。我认为 MySQL 允许它们用于具有某些设置的字符串,但您不应该使用它们。
从技术上讲,这应该返回一个错误,所以我认为这不是你的问题。
你的问题可能是你使用的是旧的 mysql 扩展,它可能不支持你的 mysql 版本。
Double quotes are not allowed for strings in SQL, as they are used for identifiers (like MySQL uses the backtick '`'). I think MySQL allows them for strings with some settings, but you shouldn't use them.
Technically that should return an error, so I don't think that's your problem.
What could be your problem is that you're using the old mysql extension, which may not support your mysql version.
可能是拼写错误,但
应该有引号:
Might be a typo, but
should have quotes around it: