我正在尝试从数据库中选择一个值。选择查询返回1
或0
。如果返回值是1
,我想回显“是”,如果返回值是0
,我要回显“否”。
运行脚本时,我总是得到“是”。
有人知道我的脚本出了什么问题吗?
这是我的PHP脚本:
$sql = "SELECT row FROM table WHERE id='". $_GET['id'] ."'";
$result = $conn->query($sql);
if ($result == 1){
echo 'yes';
}
else
{
echo 'No';
}
$conn->close();
答案 0 :(得分:1)
对于答案,重要的是要知道使用哪个数据库API。 对于大多数API
$result
将是代表您结果的一种结果对象。通常是行的集合。您可以调用某种fetch函数从结果中获取一行,然后检查该行是否包含1或0。 您应该阅读API的文档以了解更多详细信息。 PHP总是给出“是”,因为==运算符试图进行类型转换,而我想它会将两个值都转换为true。 http://php.net/manual/de/language.types.type-juggling.php
答案 1 :(得分:1)
如果只想知道ID是否存在,则可以使用COUNT(*)
表达式。这样一来,无论计数是0还是1,都将确保查询返回恰好一行。
您应该养成使用参数的习惯,而不是通过将$_GET
变量连接到查询中来创建SQL注入漏洞。
在每个可能返回错误的数据库函数之后检查错误。
$sql = "SELECT COUNT(*) FROM table WHERE id=?";
if (($stmt = $conn->prepare($sql) === false) {
error_log($conn->error);
die("Database error");
}
// assuming mysqli, but if you use PDO, binding is done differently
if ($stmt->bind_param('i', $_GET['id']) === false) {
error_log($stmt->error);
die("Database error");
}
if ($stmt->execute() === false) {
error_log($stmt->error);
die("Database error");
}
if (($result = $stmt->get_result()) === false) {
error_log($stmt->error);
die("Database error");
}
$row = $result->fetch_row();
$count = $row[0];
if ($count >= 1){
echo 'yes';
}
else
{
echo 'No';
}
$stmt->close();
$conn->close();