2010-02-09 47 views
4

运行时我真的被这个难住了。这里是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); 
    } 

} 

这里是部分什么一个循环期间的代码输出:

串(37) “1。新英格兰(东北地区)”
串(122 ) “SELECT * FROM POSSIBLE_VALUES WHERE的table_id = 3,COL_NAME ='师和价值= '1。新英格兰(东北地区)'”
布尔(假)

现在,当我复制查询我nto phpmyadmin SQL编辑器它确实返回结果。我甚至尝试使用LIKE“%...%”,如here中所建议的,但同样的事情发生(phpmyadmin返回一行,PHP返回0行)。

+2

逃离你的琴弦!这就是要求SQL注入! – Johnco 2010-02-09 21:08:37

+0

修复了注入问题(我希望) – 2010-02-09 21:23:41

+0

您是否100%确定您使用的是相同的数据库连接,数据库和表? – 2010-02-09 21:28:12

回答

2

从手册上rawurldecode()

注:rawurldecode()不解码加上符号('+')到空格中。 urldecode()会。

,如果你输出你的MySQL查询,我敢打赌,你的strting会是这个样子:

1+.New+England+(Northeast+region) 

尝试urldecode()作为手工录入建议。

+0

啊,这导致我最终的原因。出于某种原因,我的帖子用下划线替换了句点,所以我告诉php urlencode字符串,并且进行str_replace('。','.',$ str)来修复这段时间。问题是我没有再次解码这段时间,所以实际的html显示为“... AND value ='1 . New England(Northeast reg ...”。Grrr,现在可以工作了,感谢您的帮助。 – 2010-02-09 22:14:49

0

你应该使用单引号代替双引号,即:

SELECT * FROM possible_values WHERE table_id=3 AND col_name='DIVISION' AND value = '1 .New England (Northeast region)' 
+0

我更新了代码,这并没有解决问题。 – 2010-02-09 21:24:36

0

双引号是不允许在SQL字符串,它们用于标识(如MySQL使用反引号“`”)。我认为MySQL允许他们使用某些设置的字符串,但不应该使用它们。

从技术上讲,应该返回一个错误,所以我不认为这是你的问题。

什么可能是你的问题是你使用旧的MySQL扩展,它可能不支持你的MySQL版本。

+0

我不这么认为。我运行MySQL客户端版本:5.0.51b与PHP版本5.2.6和phpMyAdmin - 2.11.7 – 2010-02-09 21:27:16

+0

我记得很多次,当人们使用旧的MySQL扩展时遇到问题......那么为什么要使用它?使用mysqli。 – 2010-02-09 21:29:52

0

可能是一个错字,但

table_id=$request 

应该有引号周围:

table_id='$request' 
相关问题