2010-02-09 70 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'