2012-12-10 155 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)";