このコードが機能しないのはなぜですか?
$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として返されます。
このコードが機能しないのはなぜですか?
$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として返されます。
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';
}
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);
MySQL のドキュメントによると、select ステートメントが成功した場合はリソースが返され、ステートメントが失敗した場合は「false」が返されます。
あなたが達成しようとしていることを達成するためのより良い、より安全な方法がありますが、あなたの声明は次のように簡単に修正できます。
if($ようこそ === false) { echo 'レジスタは 0'; } そうしないと { echo 'レジスタは 1'; }
それは機能しますが、前述したように、コード全体をより安全なバージョンに更新する必要があります。