我真的很难过。这是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 .New England(Northeast region)'”
布尔(假)
现在,当我将该查询复制到phpmyadmin SQL编辑器时,它实际上会返回一个结果。我甚至尝试使用here中建议的LIKE“%...%”,但同样的事情发生(phpmyadmin返回一行,php返回0行)。
答案 0 :(得分:2)
来自rawurldecode()上的手册:
注意:rawurldecode()不会将加号('+')解码为空格。 urldecode()的确如此。
如果输出你的mySQL查询,我打赌你的strting看起来像这样:
1+.New+England+(Northeast+region)
尝试urldecode(),如手册条目所示。
答案 1 :(得分:0)
你应该使用单引号而不是双引号,即:
SELECT * FROM possible_values WHERE table_id=3 AND col_name='DIVISION' AND value = '1 .New England (Northeast region)'
答案 2 :(得分:0)
SQL中的字符串不允许使用双引号,因为它们用于标识符(例如MySQL使用反引号''')。我认为MySQL允许他们使用某些设置的字符串,但你不应该使用它们。
从技术上讲,应该返回一个错误,所以我认为这不是你的问题。
你可能遇到的问题是你正在使用旧的mysql扩展,它可能不支持你的mysql版本。
答案 3 :(得分:0)
可能是一个错字,但
table_id=$request
应该有引号:
table_id='$request'