0

以前に投稿しましたが、問題を適切に説明できず、解決することもできませんでした。これは私が持っているものです。

$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>";
            }
        }
}

forループ内に実行whileされないループがあり、forループを外側に移動すると正常に動作しますが、保存されている投稿のタイトル、能力などについてユーザーをチェックするためにループ内whileにループが必要ですwhile私のデータベースで。問題を特定するためにこれまでに試したことを示しました。クエリ、バインド、または実行が true を表示していない場合にエラーを解消しようとしましたが、ヒットしました。このためのコードが引き出されているので、あなたの読書能力が混乱することはありません。

4

2 に答える 2

2

ユーザー名を「分解」するときは、すべてではなく、各ユーザー名を引用符で囲む必要があります。また、名前をデータ入力に対して安全にします。

$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();
}
于 2012-12-10T04:01:24.627 に答える
0

節でデータ バインディングを使用するのはあまり良くないので、古い廃止された関数INを本当に必要としていて気にしない場合は、これを試してください。INmysql_*

$user="'".implode("','",array_map(function($s){
  return mysql_real_escape_string($s);
},$matches["user"])."'";
$rara="SELECT * FROM accounts WHERE username IN ($user)";
于 2012-12-10T04:08:27.330 に答える