gpt4 book ai didi

php - 无法访问 sql 查询的 mysqli_result 对象

转载 作者:行者123 更新时间:2023-11-29 11:36:49 25 4
gpt4 key购买 nike

嗨,我对这种方法有疑问,它让我发疯。下面的查询应该从数据库返回一个字段,即文件名匹配的 id。只应返回一个值。当我运行查询时,我得到一个返回的 SQL 对象,看起来不错:

mysqli_result Object ( [current_field] => 0 [field_count] => 1 [lengths] => [num_rows] => 0 [type] => 0 ) 

但是,无论我尝试什么方式,我都无法访问上述查询对象,或者至少我没有从中获得任何值(value)。我做了完全相同的事情来获取包 id,它工作得很好。

我使用了 $row = $result_package_id->fetch_array(MYSQLI_ASSOC);获取 package_id ,我尝试了 module_id 但没有成功。尝试了 mysqli_fetch_array 但它也不起作用。不知道下一步该做什么,有人可以帮忙吗?

添加了 getPackageId 方法和调用这两个方法的 if 语句。每次查询成功时,都会检索 id 和包 id,并使用这两个值创建一个新对象。

function getId($fileName){
$con = connect();
if (!$con) {
trigger_error(mysqli_error($con), E_USER_ERROR);
die('Could not connect: ' . mysqli_error($con));
}
$yModuleId = 0;
$sql_filename = mysqli_real_escape_string($con, $fileName);
$query_module_id = "SELECT id FROM y_module WHERE fileName='" . $sql_filename . "'";
$result_module_id = mysqli_query($con, $query_module_id);
while($row_model = mysqli_fetch_array($result_module_id)){
$yModuleId = $row_model['id'];
return $yModuleId;
}
}


function getYPackageId($package_name){
$con = connect();
if (!$con) {

trigger_error(mysqli_error($con), E_USER_ERROR);
die('Could not connect: ' . mysqli_error($con));
}

$sql_packageName = mysqli_real_escape_string($con, $package_name);

$query_package_id = "SELECT id FROM y_package WHERE name='" . $package_name . "'";
$result_package_id = mysqli_query($con, $query_package_id) or die("__LINE__ : " . mysqli_error($con));

while($row_package = mysqli_fetch_array($result_package_id)){
$yPackageId = $row_package['id'];
print_r($yPackageId);
print_r("</br>");
print_r("</br>");
return $yPackageId;
};
}

if($result_model && $result_package && $result_model_package) {
$yModuleId = getId($fileName);
$yPackageId = getYPackageId($package_name);
$yIdObject = new YIds($yModuleId, $yaPackageId);
$yIdObjects [] = $yIdObject;
mysqli_query($con, "COMMIT");
$message = array("success", "[SUCCESS]", "Model published successfully.",$module_id);
}

最佳答案

你可以使用

while ($row = $result->fetch_assoc()) {
$saved[] = $row;
}

但我认为从你的代码中显示的一个更重要的问题是你似乎混合了过程和面向对象的 SQL 查询。

所以:

  • 1) 重写您的代码以使用对象,您对 mysqli_ 函数的使用仅返回数组。

  • 2) 或者,将当前代码用作数组,因为它就是数组,而不是对象。

程序

function getId($fileName){
//this does nothing. Unless this is a custom function?
//$con = connect();
// should be:
$con = mysqli_connect(details,...);
if (!$con) {
trigger_error(mysqli_error($con), E_USER_ERROR); //?
die('Could not connect: ' . mysqli_error($con));
}
//$yModuleId = 0; //unneeded.
$sql_filename = mysqli_real_escape_string($con, $fileName);
$query_module_id = "SELECT id FROM y_module WHERE fileName='" . $sql_filename . "'";
//add an error feedback for debugging:
$result_module_id = mysqli_query($con, $query_module_id) or die("__LINE__.":".mysqli_error($con));
while($row_model = mysqli_fetch_array($result_module_id)){
$yModuleId = $row_model['id'];
return $yModuleId;
}
}

面向对象:

 $query_module_id = "SELECT id FROM y_module WHERE fileName='?'";
$con = new mysqli($details,...);
$thisQuery = $con->prepare($query_module_id);
$thisQuery->bind_param("s",$sql_filename);
$thisQuery->execute();
while ($row = $thisQuery->fetch_assoc()) {
$saved[] = $row;
}
$thisQuery->close();

由此,$saved 变量将是一个结果数组。

<小时/>

附加说明:

  • 您正在代码底部附近使用 MySQL COMMIT,这用于事务,但您尚未表明您已设置或开始任何 MySQL 事务。

  • getYPackageIdwhile 语句内有一个 return,这意味着 while 只会运行一次,因为一旦当它达到返回时,它就会这样做。格式错误。

  • 删除 while 语句右括号后面的分号。这是糟糕的语法。

关于php - 无法访问 sql 查询的 mysqli_result 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36444799/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com