2012-12-10 213 views
0

我以前做過一篇文章,但無法正確解釋我的問題,也無法解決問題。這是我的。While循環拒絕工作

$shoutlines = file($shout_file); 

$aTemp = array(); 
foreach($matches['user'] as $user) { 
    $aTemp[] = "'" . $user . "'"; 
} 
$user = implode(",", $aTemp); 

$rara = "SELECT * FROM accounts WHERE username IN ($user)"; // Tried this statment both as a query and prepared statement 
$getlevel = $db->query("SELECT * FROM accounts WHERE username IN '(".$user.")'"); // Tried this both as a query and prepared statement 
//$getlevel->bind_param('s', $user); 
//$getlevel->execute(); 
//$level = $getlevel->get_result(); 
//$getlevel->store_result(); 
while($getdb = $getlevel->fetch_assoc()){ 
    //output the html 
     for($i = 0; $i < (1000); $i++) 
     { 
      if(isset($shoutlines[$i])) 
      { 

       $shoutline = preg_replace('/<\/div>\n/', ' ', $shoutlines[$i], 1); 
       echo showSmileys($shoutline) . "<div class='delete'><a href='javascript: delete_shoutline({$i});' title='Delele'>delete</a></div></div>"; 
      } 
     } 
} 

我有while環內的for循環,不會在其中運行,如果我移動for循環正常工作的while之外,但我需要它在while循環,使的檢查用戶的職位,能力等,保存在我的數據庫中。我已經展示了我到目前爲止已經嘗試過的那些問題,如果查詢,綁定或執行過程中顯示錯誤,但我已經嘗試消除錯誤,但現在已經點擊了。這個代碼被拔出,所以你的閱讀能力沒有太多的混亂,任何幫助,這將不勝感激。

+0

嘗試呼應說:「SELECT * FROM帳戶其中username =「」,「」,我認爲它會尋找錯誤 –

+0

看起來是這樣,除非我的眼睛已經從瘋了$用戶。」看看這個代碼整天看起來很好'SELECT * FROM accounts WHERE username ='kira423,testin,kira423,kira423,kira423,kira423,kira423,kira423,kira423,kira423,kira423,kira423,kira423,kira423,kira423,kira423' 「我知道它重複着,但它是從文本文件中檢查信息,這是我知道去做的唯一方法。 – kira423

+0

你應該使用'OR'或'AND',http://www.w3schools.com/sql/sql_and_or.asp –

回答

2

當「爆炸」的用戶名,你需要ot包裝每個用戶名引號,而不是整個事情。還要使名稱對數據輸入安全。

$aTemp = array(); 
foreach($matches['user'] as $user) { 
    $aTemp[] = '"' . mysql_real_escape_string($user) . '"'; 
} 
$user = implode(",", $aTemp); 

然後用第一個查詢:

"SELECT * FROM accounts WHERE username IN ($user)"; 

編輯:添加錯誤檢查:

$getlevel = $db->query("SELECT * FROM accounts WHERE username IN ($user)"); 
if ($getlevel == false) { 
    // Normally you'll build into a function or class, but this is the simple example 
    // Never output SQL errors on a live site, but log to file or (if you can do it safely) the database. 
    echo 'Whoopsie<br />'; 
    var_dump($db->errorInfo()); 
    exit(); 
} 
+0

有了這個,我得到了'致命錯誤:調用一個成員函數fetch_assoc()在非線對象上的C:\ xampp \ htdocs \ gptcode \ shoutbox \ update.php 116行' 116行是'while $ getdb = $ getlevel-> fetch_assoc()){' – kira423

+0

在這種情況下存在SQL錯誤,「查詢」返回false。您應該始終查看結果是否爲假,如果是,則回顯/報告錯誤。我看不到上面的代碼存在問題,那麼你能告訴我SQL報告有什麼錯誤嗎?我們可以從那裏去? – Robbie

+0

它確實返回了我在printf(「Errormessage:%s \ n」,$ getlevel-> error)中添加的任何錯誤;'它只是放入ErrorMessage:但沒有任何錯誤。也嘗試了你放在上面的東西,什麼都沒有。 – kira423

0

使用數據與IN條款結合是不是很好,所以如果你真的需要IN而不在意使用舊的,不推薦的mysql_*函數,試試這個:

$user="'".implode("','",array_map(function($s){ 
    return mysql_real_escape_string($s); 
},$matches["user"])."'"; 
$rara="SELECT * FROM accounts WHERE username IN ($user)";