【发布时间】:2012-03-25 07:18:19
【问题描述】:
我面临的问题是,mysql_num_rows 在整个代码中给了我一个 1 的输出,但是当我在 if 语句中将它匹配为 0 时,它返回 true 并执行代码。 所以 $license 返回 ..... 而不是它的实际值。
我尝试自己使用这些来调试问题。
- 尝试 print_r 查看数据是否存在。 - 是的。
- 尝试在第一部分回显 $license - 返回正确的值。
- 尝试检查 mysql_num_rows 的值 - 返回 1。
- 在 if 语句中将其与 0 匹配 - 当它应该为 false 时返回 true,因为值为 1。
有什么帮助吗?
$check = mysql_query("SELECT * FROM licenses WHERE email='$email'") or die(mysql_error
());
if (mysql_num_rows($check) > 0)
{
while ($data = mysql_fetch_array($check))
{
print_r($data); // for test
$name = $data['name'];
$license = $data['pid'];
echo $license; // test print 1
$comments = $data['comments'];
}
if ($license == "Sgsmorgan")
$license = "EWP Discounted Basic (Simpleleveraging)";
}
$count = mysql_num_rows($check); // for test
echo $count; // returns 1.
if (mysql_num_rows($check) == 0)
$name = "";
$license = "...........";
echo $license;// test print 2
$comments = "Email doesnt exist in the database";
【问题讨论】:
-
mysql 扩展已过时,即将弃用。新代码应该使用 mysqli 或 PDO,两者都有重要的优势,比如支持准备好的语句。说到,示例代码可能容易受到SQL injection 的攻击。参数化语句以关闭漏洞。
-
除非您正在编写数据库管理程序,否则不要使用
SELECT *;只选择您需要的列。 -
为了便于阅读,请选择并申请indent style。
-
以后,请考虑在发布之前缩进您的代码。这将使发现错误变得更加容易。
-
我同意你们的两个 cmets。我只是在学习这一点,所以我想我会编写一个可以工作的基本框架,然后将其修复以防止注射。关于 *,使用它,因为这比提到 3 个字段容易,但肯定会这样做。不过,我真的找不到我的代码哪里出错了。我已经多次检查了这些代码。
标签: php mysql-num-rows