【发布时间】:2011-01-15 00:09:28
【问题描述】:
我真的被这件事难住了。这是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 .New England(东北地区)"
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 行)。
【问题讨论】:
-
逃离你的字符串!这需要 SQL 注入!
-
修复了注入问题(希望如此)
-
您是否 100% 确定您使用的是相同的数据库连接、数据库和表?
-
你试过用分号吗?在 mysqli 中,这是一个 nono,但我不记得它在旧 ext 中是如何工作的......
-
@Pekka 是的,我确定我使用了正确的连接、数据库和表。实际上有一些查询是成功的,比如这个: SELECT * FROM possible_values WHERE table_id=3 AND col_name='DIVISION' AND value = '0'
标签: php mysql phpmyadmin