【问题标题】:MySQLI Bind_param query not returning resultsMySQLI Bind_param 查询不返回结果
【发布时间】:2015-06-18 06:53:23
【问题描述】:

我试图让我编写的这个函数从 MySQL 表中返回一些数据。这是我的功能。

function getCompInfoIDS($id) {
    global $mysqli;
    $query = "
Select
  computers.asset,
  computers.serial,
  rooms.building_id,
  rooms.id,
  computers.assigned_person,
  computers.computer_name,
  computers.sticker,
  operating_systems.manufacturer_id,
  operating_systems.id As id1,
  computers.memory,
  computers.hard_drive,
  computers.department,
  computers.year_purchased,
  computers.po_cs_ca,
  computers.mac_address,
  computers.group_id,
  models.manufacturer_id As manufacturer_id1,
  models.id As id2,
  computers.type,
  computers.monitor_size
From
  computers Inner Join
  rooms On computers.room_id = rooms.id Inner Join
  operating_systems On computers.os_id = operating_systems.id Inner Join
  models On computers.model = models.id
 Where
  computers.id=?";
    $stmt = $mysqli -> prepare($query);
    $stmt -> bind_param('i',$id);
    $stmt -> execute();
    $stmt -> bind_result($asset, $serial, $building_id, $room_id, $assigned_person, $computer_name, $sticker, $os_type_id, $os_id, $memory, $hard_drive, $department, $year_purchased, $po_cs_ca, $mac_address, $group_id, $model_type_id, $model_id, $comp_type, $monitor_size, $date_modified);
    while($stmt -> fetch()){
        $computer_info = array($asset, $serial, $building_id, $room_id, $assigned_person, $computer_name, $sticker, $os_type_id, $os_id, $memory, $hard_drive, $department, $year_purchased, $po_cs_ca, $mac_address, $group_id, $model_type_id, $model_id, $comp_type, $monitor_size, $date_modified);         
    }

    return $computer_info;

查询确实有效,我已经在 phpmyadmin 中使用多个 id 对其进行了测试。

我一直在关注PHP manual, 和this site 一步一步来看看我做错了什么。我在代码中的各个不同位置完成了echo "test";,以查看函数失败的位置,并且我找不到函数中的单点失败,它只是没有用结果填充数组。

我尝试在填充数组之前执行echo $asset;,但没有显示任何内容,因此我认为实际上没有任何数据被放入数组变量中。

【问题讨论】:

    标签: php mysql arrays mysqli


    【解决方案1】:

    你必须添加$stmt->store_result();,所以你的代码是这样的:

    $stmt = $mysqli -> prepare($query);
    $stmt -> bind_param('i',$id);
    $stmt -> execute();
    $stmt->store_result();
    $stmt -> bind_result($asset, $serial, $building_id, $room_id, $assigned_person, $computer_name, $sticker, $os_type_id, $os_id, $memory, $hard_drive, $department, $year_purchased, $po_cs_ca, $mac_address, $group_id, $model_type_id, $model_id, $comp_type, $monitor_size, $date_modified);
    while($stmt -> fetch()){
        $computer_info = array($asset, $serial, $building_id, $room_id, $assigned_person, $computer_name, $sticker, $os_type_id, $os_id, $memory, $hard_drive, $department, $year_purchased, $po_cs_ca, $mac_address, $group_id, $model_type_id, $model_id, $comp_type, $monitor_size, $date_modified);         
    }
    

    【讨论】:

      【解决方案2】:

      您的代码应该给出如下错误:

      Warning: mysqli_stmt::bind_result(): Number of bind variables doesn't match number of fields in prepared statement in C:\xampp\htdocs\... on line x
      

      从您的查询中选择的列数与绑定结果的数量不同。您在 SELECT 查询中只选择了 20 列,但您的 bind_result() 中有 21 个变量。

      您的查询中一定缺少一列。显然对于您的 $date_modified 变量。正确填写您的 SELECT 查询以供您绑定 $date_modified 变量。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-10-09
        • 2013-02-01
        • 2014-11-21
        相关资源
        最近更新 更多