Php 正在验证MYSQL是否执行了未使用get_result()的结果

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

当您无法使用以下代码时,验证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',$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。

mysqli
fetch()
函数将返回以下三个值之一:

  • 真正的成功。数据已被提取
  • 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.");
}
Mysqli
fetch()
函数将返回三个值之一:

  • 真正的成功。数据已被提取
  • 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。因此,错误消息始终显示。如果为空,则记录不足。如果您试图检查是否根本没有任何记录,那么我将调整上面的代码以显示一种处理该问题的示例方法。