-3

このコードが機能しないのはなぜですか?

$welcome = mysql_query("SELECT welcome FROM users WHERE id = '" . $_SESSION['user']['id'] . "'");

if($welcome == '0')
{
echo 'register is 0';
}
else
{
echo 'register is 1';
}

$_SESSION['user']['id']ちなみに、1として返されます。

4

3 に答える 3

3

MySQLは、クエリからの値ではなく、成功時にリソースを返し、エラー時にfalseを返します。これを試して:

$welcome = mysql_query("SELECT welcome FROM users WHERE id = '" . $_SESSION['user']['id'] . "'");
$row = mysql_fetch_assoc($welcome);
if($row['welcome']== '0')
{
echo 'register is 0';
}
else
{
echo 'register is 1';
}
于 2012-05-10T16:09:33.550 に答える
1

SQL インジェクション攻撃から保護されないため、そのようなクエリを作成しないでください。

$query = sprintf("SELECT welcome FROM users WHERE id = %d", $_SESSION['user']['id']);
// Perform Query
$result = mysql_query($query);

それが完了したら、結果からフェッチする必要があります。単にクエリを実行することはできません。

if(!$result)
  echo "Error"; // Deal with it
$row = mysql_fetch_assoc($result);
echo $row['welcome'];
mysql_free_result($result);
于 2012-05-10T16:10:33.837 に答える
0

MySQL のドキュメントによると、select ステートメントが成功した場合はリソースが返され、ステートメントが失敗した場合は「false」が返されます。
あなたが達成しようとしていることを達成するためのより良い、より安全な方法がありますが、あなたの声明は次のように簡単に修正できます。

if($ようこそ === false)
{
  echo 'レジスタは 0';
}
そうしないと
{
  echo 'レジスタは 1';
}

それは機能しますが、前述したように、コード全体をより安全なバージョンに更新する必要があります。

于 2012-05-10T16:54:04.940 に答える