无法访问sql查询的mysqli_result对象

时间:2016-04-06 07:53:29

标签: php mysql sql mysqli

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

display : table-row

然而,无论我尝试什么样的方式,或者至少我没有获得任何价值,我都无法访问上述查询对象。我做了完全相同的以获得包ID并且它完美地工作。

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

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

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

2 个答案:

答案 0 :(得分:1)

您可以使用

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事务。

  • return中的while语句中有一个getYPackageId,这意味着只有一次只会运行一次,因为只要它到达返回它就会做那。格式不好。

  • while语句的右括号后删除分号。这是错误的语法。

答案 1 :(得分:0)

我发现了问题,我觉得这样的白痴!问题出在这里

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'];
          }
       }
}

感谢Martin提供的所有帮助和建议非常感谢!希望这可以帮助别人,不要像我一样犯下同样的愚蠢错误。