私はmysqliを使用して、「ユーザー」が回答した「質問」の配列を取得しようとしています。私はこれを達成するためにquestions_usersテーブルを持っています。ユーザーを探して、答えたすべての質問を取得し、IDの配列を作成するために次のコードを使用していますので、これらの質問を新しい答える質問。mysqli_fetch_assoc()でIDの配列を作成する
$qusAnswered = array();
$DoWeHaveUsersql = "SELECT * FROM users WHERE `checkid`=".$checkid;
$DoWeHaveUserresult = $conn->query($DoWeHaveUsersql);
if ($DoWeHaveUserresult->num_rows > 0) {//we've got a user
$row = mysqli_fetch_assoc($DoWeHaveUserresult);
$userId = $row['id'];
$checkQuestionSql = "SELECT * FROM questions_users WHERE `user_id`=".$userId;//get all the questions_users records
$checkQuresult = mysqli_query($conn, $checkQuestionSql);
if (mysqli_num_rows($checkQuresult) > 0) {
// make an array of all the id's of questions answered
while($Qu = mysqli_fetch_assoc($checkQuresult)) {
$qusAnswered[] = $Qu['question_id'];
}
}
$newQuestionSql = "SELECT * FROM questions WHERE id NOT IN (".implode(',', $qusAnswered).") LIMIT 1";
}
問題は、私が$ qusAnswered配列を作成しているときです。データベースの内容から、値3のみが含まれている必要があります。なぜなら、回答した質問のIDが正しいからです。 $ qusAnsweredが実際に
array('1','2');
のように見えるいくつかの理由で、私は私が間違ってやっているかわからないんだけど、誰が私のために明白なことを指摘することができれば、私はそれを感謝します。変数$ newQuestionSqlであるSQLがどのように見える
:
SELECT * FROM questions WHERE id NOT IN (1,2) LIMIT 1
それは次のようになります。
SELECT * FROM questions WHERE id NOT IN (3) LIMIT 1
直接クエリで変数を入れないでください、あなたの問題を解決することがございます。 [prepared statements](http://php.net/manual/en/mysqli.prepare.php) – Swellar
を使用するこれは、単一の結合クエリで実行できます。 – miken32
質問は私にはうまく見えますが、私はあなたの考えを表には含んでいないと思います。クエリを手で実行するとどうなりますか? – Barmar