【发布时间】:2019-08-03 11:05:37
【问题描述】:
我正在尝试使用准备好的 php 语句选择 IP 地址,如果 IP 已经存在,则一切正常,但如果不存在,它永远不会进入 if($stmt -> num_rows === 0),它总是进入 elselike if查询错误。该字段设置为int unsigned。
那么这个prepared statement?有什么问题,当select不匹配任何东西时,如何让它进入if($stmt -> num_rows === 0)?
$ip_long= ip2long($ip);
$stmt = $mysqli -> prepare('SELECT INET_NTOA(ip), registry_date FROM users WHERE ip = ?');
if (
$stmt &&
$stmt -> bind_param('i', $ip_long) &&
$stmt -> execute() &&
$stmt -> store_result() &&
$stmt -> bind_result($ip, $registry_date_checker) &&
$stmt -> fetch()
) {
if($stmt -> num_rows === 0) {
//It does never enter here.
}
if($stmt -> num_rows === 1) {
//If exist enter here.
}
}
else{
//If select not found anything it always enter here.
echo "Error mysqli: ".$mysqli-> error; //Returns empty error
echo "Error stmt : ".$stmt -> error; //Returns empty error
echo "Numrows: ".$stmt -> num_rows; //Returns 0
exit;
}
【问题讨论】:
-
也许你应该检查实际的错误信息,然后你就不会出错了。
-
我更新了我的问题。 stmt 和 mysqli 的错误是空的,所以我想它们没有错。
标签: php sql mysqli prepared-statement