Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/62.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php mysqli_fetch_assoc不使用mysqli_stmt_store_结果_Php_Mysql_Mysqli_Prepared Statement - Fatal编程技术网

Php mysqli_fetch_assoc不使用mysqli_stmt_store_结果

Php mysqli_fetch_assoc不使用mysqli_stmt_store_结果,php,mysql,mysqli,prepared-statement,Php,Mysql,Mysqli,Prepared Statement,我有一个PHP文件,它通过POST请求获取JSON格式的数据 在调用mysqli\u fetch\u assoc之前,我使用的是预先准备好的语句,一切正常 警告:mysqli_fetch_assoc()希望参数1是mysqli_结果,布尔值在第31行的C:\xampp\htdocs\LoanAppTest\login.php中给出 只有当我声明mysqli_stmt_execute($stmt)时才会发生这种情况,如果我注释掉它,那么它将得到我想要的结果,但是我需要执行mysqli\u stmt

我有一个PHP文件,它通过POST请求获取JSON格式的数据

在调用mysqli\u fetch\u assoc之前,我使用的是预先准备好的语句,一切正常

警告:mysqli_fetch_assoc()希望参数1是mysqli_结果,布尔值在第31行的C:\xampp\htdocs\LoanAppTest\login.php中给出

只有当我声明mysqli_stmt_execute($stmt)时才会发生这种情况,如果我注释掉它,那么它将得到我想要的结果,但是我需要执行
mysqli\u stmt\u($stmt)
以便
$count=mysqli\u stmt\u num\u行($stmt)可以工作。这是我的代码:

if($jsonobj == null){
    header("Location: http://localhost/dashboard");
} else {
      include "config.php";
      $obj = json_decode($jsonobj, true);
      $clientID = (int)$obj['prop_ClientID'];

      $query = "SELECT ClientID, FirstName, LastName, MiddleName, ContactNo FROM tblClient WHERE ClientID = ?";

      // Initialize prepared statement
      $stmt = mysqli_stmt_init($con);

      if (!mysqli_stmt_prepare($stmt, $query)) {
        echo "SQL Statmenet Failed.";
      } else {
        // Bind parameters and execute statement
        mysqli_stmt_bind_param($stmt, "i", $clientID);
        mysqli_stmt_execute($stmt);

        // Store result and count for validation (check if ClientID exists)
        mysqli_stmt_store_result($stmt);
        $count = mysqli_stmt_num_rows($stmt);
        if ($count == 0) {
            echo "No Client ID in DB";
        } else {
            $result = mysqli_stmt_get_result($stmt);
            $row = mysqli_fetch_assoc($result); // This part returns the error
            print_r($row);
        }
      }
}

要检索行数和结果集,应仅使用一种结果检索方法,
mysqli\u stmt\u get\u result(mysqli\u stmt)
,以及

mysqli\u stmt\u存储结果(mysqli\u stmt)
,以及

问题实际上是由
mysqli\u stmt\u store\u result
引起的,它将结果集移动到内存中,作为后续调用
mysqli\u stmt\u fetch(mysqli\u stmt)
的缓冲区,然后从缓冲区中提取记录,而不是
mysqli\u fetch\u assoc(mysqli\u result)

mysqli\u stmt\u存储\u结果
//初始化准备好的语句
$stmt=mysqli\u stmt\u init($con);
如果(!mysqli_stmt_prepare($stmt,$query)){
回显“SQL Statmenet失败”;
}否则{
//Bind参数和execute语句
mysqli_stmt_bind_param($stmt,$i',$clientID);
如果(mysqli_stmt_execute($stmt)){
//将结果绑定到行数组
mysqli_stmt_bind_result($stmt,$row['ClientID'],$row['FirstName'],$row['LastName'],$row['MiddleName'],$row['ContactNo']);
//存储验证结果和计数(检查ClientID是否存在)
if(mysqli_stmt_store_result($stmt)){
$count=mysqli\u stmt\u num\u行($stmt);
如果(0==$count){
回显“数据库中没有客户端ID”;
}否则{
mysqli_stmt_fetch($stmt);
打印(行);
}
mysqli_stmt_free_结果($stmt);
}
}
}
mysqli_stmt_close($stmt);
mysqli\u stmt\u获取结果
//初始化准备好的语句
$stmt=mysqli\u stmt\u init($con);
如果(!mysqli_stmt_prepare($stmt,$query)){
回显“SQL Statmenet失败”;
}否则{
//Bind参数和execute语句
mysqli_stmt_bind_param($stmt,$i',$clientID);
mysqli_stmt_execute($stmt);
//存储验证结果和计数(检查ClientID是否存在)
如果($result=mysqli\u stmt\u get\u result($stmt)){
$count=mysqli\u num\u行($result);
如果(0==$count){
回显“数据库中没有客户端ID”;
}否则{
$row=mysqli\u fetch\u assoc($result);
打印(行);
}
mysqli_免费_结果($result);
}
}
mysqli_stmt_close($stmt);

但是,此实例中不需要
mysqli\u stmt\u num\u行
mysqli\u num\u行
,因为当没有可用结果时
mysqli\u fetch\u assoc
将返回
null
,因此您可以用以下内容替换它

//初始化准备好的语句
$stmt=mysqli\u stmt\u init($con);
如果(!mysqli_stmt_prepare($stmt,$query)){
回显“SQL Statmenet失败”;
}否则{
//Bind参数和execute语句
mysqli_stmt_bind_param($stmt,$i',$clientID);
mysqli_stmt_execute($stmt);
//存储验证结果和计数(检查ClientID是否存在)
如果($result=mysqli\u stmt\u get\u result($stmt)){
如果($row=mysqli\u fetch\u assoc($result)){
打印(行);
}否则{
回显“数据库中没有客户端ID”;
}
mysqli_免费_结果($result);
}
}
mysqli_stmt_close($stmt);

要检索行数和结果集,您应该只使用一种结果检索方法,
mysqli\u stmt\u get\u result(mysqli\u stmt)
,以及

mysqli\u stmt\u存储结果(mysqli\u stmt)
,以及

问题实际上是由
mysqli\u stmt\u store\u result
引起的,它将结果集移动到内存中,作为后续调用
mysqli\u stmt\u fetch(mysqli\u stmt)
的缓冲区,然后从缓冲区中提取记录,而不是
mysqli\u fetch\u assoc(mysqli\u result)

mysqli\u stmt\u存储\u结果
//初始化准备好的语句
$stmt=mysqli\u stmt\u init($con);
如果(!mysqli_stmt_prepare($stmt,$query)){
回显“SQL Statmenet失败”;
}否则{
//Bind参数和execute语句
mysqli_stmt_bind_param($stmt,$i',$clientID);
如果(mysqli_stmt_execute($stmt)){
//将结果绑定到行数组
mysqli_stmt_bind_result($stmt,$row['ClientID'],$row['FirstName'],$row['LastName'],$row['MiddleName'],$row['ContactNo']);
//存储验证结果和计数(检查ClientID是否存在)
if(mysqli_stmt_store_result($stmt)){
$count=mysqli\u stmt\u num\u行($stmt);
如果(0==$count){
回显“数据库中没有客户端ID”;
}否则{
mysqli_stmt_fetch($stmt);
打印(行);
}
mysqli_stmt_free_结果($stmt);
}
}
}
mysqli_stmt_close($stmt);
mysqli\u stmt\u获取结果
//初始化准备好的语句
$stmt=mysqli\u stmt\u init($con);
如果(!mysqli_stmt_prepare($stmt,$query)){
回显“SQL Statmenet失败”;
}否则{
//Bind参数和execute语句
mysqli_stmt_bind_param($stmt,$i',$clientID);
mysqli_stmt_execute($stmt);
//存储验证结果和计数(检查ClientID是否存在)
如果($result=mysqli\u stmt\u get\u result($stmt)){
$count=mysqli\u num\u行($result);
如果(0==$count){
回显“数据库中没有客户端ID”;
}否则{
$row=mysqli\u fetch\u assoc($result);
打印(行);
}
mysqli_免费_结果($result);
}
}
mysqli_stmt_close($stmt);