我试图使用此查询:
mysql_query("SELECT COUNT(*) FROM Users WHERE (Username=" + $username + "AND Hash=" + $hash + ")")
返回php脚本中的身份验证行数。但这不会返回一个int?如何使用返回值来获取行数?
答案 0 :(得分:2)
您可以使用mysql_fetch_array
从结果中获取行:
$result = mysql_query("SELECT COUNT(*) FROM Users WHERE ...") or die(mysql_error());
$row = mysql_fetch_array($result);
echo $row[0];
或者,由于您只需要获取单个值,因此您可以使用mysql_result
更简单地执行此操作:
$result = mysql_query("SELECT COUNT(*) FROM Users WHERE ...") or die(mysql_error());
echo mysql_result($result, 0);
我还建议您查看参数化查询,而不是使用字符串连接来构建SQL查询。
答案 1 :(得分:2)
您当前的问题是您使用+
代替.
来连接字符串。
username
和hash
的值需要在它们周围引用,以便它们不会破坏查询:
mysql_query("SELECT COUNT(*) FROM Users WHERE (Username='" . $username . "' AND Hash='" + $hash . "')")
请确保为mysql_query()
来电添加正确的错误检查,如manual所示。
另外请确保您了解SQL injection。对于所有值,使用库的适当卫生方法(如mysql_real_escape_string()
作为经典mysql库),或切换到PDO和预处理语句。
答案 2 :(得分:0)
$row = mysql_fetch_row($your_resource);
echo (int)($row[0]);
此外,您可能对SQL注入持开放态度。你应该学会用PDO做好准备好的查询。
答案 3 :(得分:0)
这样做的一种方法是:
$result = mysql_query("SELECT username FROM Users WHERE (Username='" . $username . "' AND Hash='" . $hash . "') LIMIT 1");
$returned = mysql_numrows($result);
echo $returned ." users";
但是,您可以根据您对结果集的操作进一步优化查询。
看看http://php.net/manual/en/function.mysql-num-rows.php 以及http://www.php.net/manual/en/function.mysql-fetch-array.php和其他mysql_fetch_ *函数
另外,请确保正确格式化查询。查看mysql_real_escape_strings以逃避用户输入以避免SQL注入攻击。