Php mysqli_fetch_assoc不使用mysqli_stmt_store_结果
我有一个PHP文件,它通过POST请求获取JSON格式的数据 在调用mysqli\u fetch\u assoc之前,我使用的是预先准备好的语句,一切正常 警告:mysqli_fetch_assoc()希望参数1是mysqli_结果,布尔值在第31行的C:\xampp\htdocs\LoanAppTest\login.php中给出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
只有当我声明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);