Php 正在验证MYSQL是否执行了未使用get_result()的结果
当您无法使用以下代码时,验证mysql成功执行并返回结果的最佳方法是什么:Php 正在验证MYSQL是否执行了未使用get_result()的结果,php,mysqli,Php,Mysqli,当您无法使用以下代码时,验证mysql成功执行并返回结果的最佳方法是什么: $db = dbConnect(); //begin prepared statements to search db $stmt = $db->prepare("SELECT email,authentication,email_confirm,externalid,password,id, admin FROM users WHERE email=?"); $stmt->bind_param('s',$e
$db = dbConnect();
//begin prepared statements to search db
$stmt = $db->prepare("SELECT email,authentication,email_confirm,externalid,password,id, admin FROM users WHERE email=?");
$stmt->bind_param('s',$email);
$stmt->execute();
$result = $stmt->get_result();
if (!$result){
//error statement
} if (!(mysqli_num_rows($result)==0)){
//action to perform
} else {
// no result returned
}
我在脚本中多次使用get_result,而我的主机提供商没有mysqlnd驱动程序,所以我必须重写很多代码。我知道我仅限于绑定_result和fetch(),但我需要一些帮助来重写代码,因为我的思维方式与我第一次编写代码的方式一样
我也在使用mysqli,而不是PDO。mysqlifetch()
函数将返回以下三个值之一:
- 真正的成功。数据已被提取
- FALSE-发生错误
- NULL-不再存在行/数据或发生数据截断
$db = dbConnect();
$query = "SELECT email,authentication,email_confirm,externalid,password,id, admin FROM users WHERE email=?";
$stmt = $db->prepare();
$stmt->bind_param('s',$email);
$stmt->execute();
$stmt->bind_result($email,$auth,$email_confirm,$externalid,$password,$id,$admin);
// Will only execute loop if returns true
$record_count = 0;
while($result = $stmt->fetch())
{
// Increment counter
$record_count++;
// Do something with bound result variables
echo("Email is $email");
}
// After the loop we either ran out of results or had an error
if($result === FALSE)
{
echo("An error occurred: " . $db->error());
}
elseif($record_count == 0)
{
echo("No records exist.");
}
Mysqlifetch()
函数将返回三个值之一:
- 真正的成功。数据已被提取
- FALSE-发生错误
- NULL-不再存在行/数据或发生数据截断
$db = dbConnect();
$query = "SELECT email,authentication,email_confirm,externalid,password,id, admin FROM users WHERE email=?";
$stmt = $db->prepare();
$stmt->bind_param('s',$email);
$stmt->execute();
$stmt->bind_result($email,$auth,$email_confirm,$externalid,$password,$id,$admin);
// Will only execute loop if returns true
$record_count = 0;
while($result = $stmt->fetch())
{
// Increment counter
$record_count++;
// Do something with bound result variables
echo("Email is $email");
}
// After the loop we either ran out of results or had an error
if($result === FALSE)
{
echo("An error occurred: " . $db->error());
}
elseif($record_count == 0)
{
echo("No records exist.");
}
为什么你有这个(看似)任意的限制?不是任意的,如果我使用get_result,会抛出一个致命错误:啊,我现在明白了。忽略我的评论。你应该在
->execute()
阶段检查是否有东西爆炸了。select查询不太可能正确执行,但随后将无法访问。如果sql server突然消失,这可能会很高兴。为什么会有这种(看似)任意的限制?不是任意的,如果我使用get_result,会抛出一个致命错误:啊,我现在明白了。忽略我的评论。你应该在->execute()
阶段检查是否有东西爆炸了。select查询不太可能正确执行,但随后将无法访问。如果sql server突然消失,这可能会很高兴。是的,我开始使用while()循环。但是,如果$stmt->fetch()返回false或null,如何包含一条错误消息,说明没有返回任何内容或执行失败。你能把while循环构造成有条件的失败或空情况吗?如果你理论上有无限的结果,while循环永远不会结束。因此,在循环之后,您知道您已经没有结果或出现错误。我将更新代码以向您展示处理它的方法。这是有道理的。我被困在if..else的思维模式中,试图以某种方式使用if。这太完美了!我现在正在实现它,在循环完成后,变量$result似乎为null,不管它最初是否设置为1表示true。因此,错误消息始终显示。如果为空,则记录不足。如果您试图检查是否没有任何记录,那么我将调整上面的代码以显示处理该记录的示例方法。是的,我开始使用while()循环。但是,如果$stmt->fetch()返回false或null,如何包含一条错误消息,说明没有返回任何内容或执行失败。你能把while循环构造成有条件的失败或空情况吗?如果你理论上有无限的结果,while循环永远不会结束。因此,在循环之后,您知道您已经没有结果或出现错误。我将更新代码以向您展示处理它的方法。这是有道理的。我被困在if..else的思维模式中,试图以某种方式使用if。这太完美了!我现在正在实现它,在循环完成后,变量$result似乎为null,不管它最初是否设置为1表示true。因此,错误消息始终显示。如果为空,则记录不足。如果您试图检查是否根本没有任何记录,那么我将调整上面的代码以显示一种处理该问题的示例方法。