![](/img/trans.png)
[英]PHP mysqli query is not returning mysqli_result object on SELECT statement
[英]Can't access the mysqli_result Object of an sql query
嗨,我对这种方法有疑问,这让我发疯了。下面的查询应该从数据库返回一个字段,即文件名匹配的ID。 仅应返回一个值。 当我运行查询时,我得到一个看起来不错的SQL对象:
mysqli_result Object ( [current_field] => 0 [field_count] => 1 [lengths] => [num_rows] => 0 [type] => 0 )
但是,无论尝试哪种方式,或者至少没有任何价值,我都无法访问上述查询对象。 我做了完全相同的操作来获取程序包ID,它可以完美运行。
我用$ row = $ result_package_id-> fetch_array(MYSQLI_ASSOC); 获取package_id,我尝试为module_id尝试,但是没有用。 尝试了mysqli_fetch_array,它也不起作用。 下一步该怎么办?
添加了getPackageId方法和调用两个方法的if语句。 每次查询成功时,都会检索id和package 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事务。
您在getYPackageId
的while
语句中有一个return
,这意味着while只会运行一次,因为一旦到达return便会执行该操作。 格式错误。
在while
语句的右括号后删除分号。 这是错误的语法。
我发现了问题,觉得自己很蠢! 问题在这里
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);
}
在尝试从数据库中获取id和package_id之后,我正在运行提交,这就是为什么我没有得到任何结果的原因。 我将其更改为:
if($result_model && $result_package && $result_model_package) {
mysqli_query($con, "COMMIT");
$yModuleId = getId($fileName);
$yPackageId = getYPackageId($package_name);
$yIdObject = new YIds($yModuleId, $yaPackageId);
$yIdObjects [] = $yIdObject;
$message = array("success", "[SUCCESS]", "Model published successfully.",$module_id);
}
效果很好。 这是我正常工作时getId()方法的外观
function getId($moduleName, $moduleRevision){
$con = connect();
if (!$con) {
trigger_error(mysqli_error($con), E_USER_ERROR);
die('Could not connect: ' . mysqli_error($con));
}
$sql_moduleName = mysqli_real_escape_string($con, $moduleName);
$sql_moduleRevision = mysqli_real_escape_string($con, $moduleRevision);
$query_module_id = "SELECT id, module_name, module_revision FROM y_module";
$result_module_id = mysqli_query($con, $query_module_id);
while($row = mysqli_fetch_assoc($result_module_id)){
if($row['module_name'] === $moduleName && $row['module_revision'] == $moduleRevision){
return $row['id'];
}
}
}
感谢马丁提供的所有帮助和建议,不胜感激! 希望这可以通过不犯与我相同的愚蠢错误来帮助某人。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.