PHP num_returns始终返回1

时间:2016-06-02 14:13:57

标签: php mysql mysqli

编辑:已解决

我找到了我正在寻找的解决方案。感谢Alex指出我的错误。

我试图计算查询中非空的结果数。

以下是我的表现:

function checkImages($id)
{
    global $mysqli; 
    $stmt = $mysqli->prepare("SELECT 
        Img_1,
        Img_2,
        Img_3,
        Img_4,
        Img_5,
        Img_6,
        Img_7,
        Img_8,
        Img_9,
        Img_10,
        Img_11,
        Img_12,
        Img_13,
        Img_14,
        Img_15,
        Img_16,
        Img_17,
        Img_18,
        Img_19,
        Img_20,
        Img_21,
        Img_22,
        Img_23,
        Img_24,
        Img_25,
        Img_26,
        Img_27,
        Img_28,
        Img_29,
        Img_30
        FROM kittens
        WHERE
        id = ?");
    $stmt->bind_param("i", $id);
    $stmt->execute();
    $stmt->bind_result($img1, $img2, $img3, $img4, $img5, $img6, $img7, $img8, $img9, $img10, $img11, $img12, $img13, $img14, $img15, $img16, $img17, $img18, $img19, $img20, $img21, $img22, $img23, $img24, $img25, $img26, $img27, $img28, $img29, $img30);
    while ($stmt->fetch()){
        $row[] = array('Img_1' => $img1, 'Img_2' => $img2, 'Img_3' => $img3, 'Img_4' => $img4, 'Img_5' => $img5, 'Img_6' => $img6, 'Img_7' => $img7, 'Img_8' => $img8, 'Img_9' => $img9, 'Img_10' => $img10, 'Img_11' => $img11, 'Img_12' => $img12, 'Img_13' => $img13, 'Img_14' => $img14, 'Img_15' => $img15, 'Img_16' => $img16, 'Img_17' => $img17, 'Img_18' => $img18, 'Img_19' => $img19, 'Img_20' => $img20, 'Img_21' => $img21, 'Img_22' => $img22, 'Img_23' => $img23, 'Img_24' => $img24, 'Img_25' => $img25, 'Img_26' => $img26, 'Img_27' => $img27, 'Img_28' => $img28, 'Img_29' => $img29, 'Img_30' => $img30);
    }
    $stmt->close();
    return ($row);
}

然后:

$id = $_GET['id'];
$kitties = checkImages($id);
if(is_array($kitties)){
    foreach($kitties as $row){
        $total = count(array_filter($row));
    }
}

我会留下我的旧问题,以便其他人可以从我的错误中吸取教训。

谢谢@Alex。

我试图在sql查询中返回非空行数。每次我尝试,结果总是1.我试图改变一些事情,但它似乎仍然是1.

编辑:我想计算非空的查询行数。行(Img_#)包含图像的路径和文件名。

因此,例如,id 12存储了20个图像。对于存储的每个图像,位置和文件名存储在img_#字段之一中。因此,当我查询表格时,我想检查30个img_字段中有多少不是空的。

这是我的第一次尝试:

function checkImages($id)
{
    global $mysqli;
    $stmt = $mysqli->prepare("SELECT
        Img_1,
        Img_2,
        Img_3,
        Img_4,
        Img_5,
        Img_6,
        Img_7,
        Img_8,
        Img_9,
        Img_10,
        Img_11,
        Img_12,
        Img_13,
        Img_14,
        Img_15,
        Img_16,
        Img_17,
        Img_18,
        Img_19,
        Img_20,
        Img_21,
        Img_22,
        Img_23,
        Img_24,
        Img_25,
        Img_26,
        Img_27,
        Img_28,
        Img_29,
        Img_30
        FROM kitties
        WHERE
        id = ?");
    $stmt->bind_param("i", $id);    
    $stmt->execute();
    $stmt->store_result();
    $num_returns = $stmt->num_rows;
    $stmt->close();

    if ($num_returns > 0)
    {
        return $num_returns;
    }
    else
    {
        return false;   
    }
}

第二个版本:

function checkImages($id)
{
    global $mysqli; 
    $stmt = $mysqli->prepare("SELECT 
        Img_1,
        Img_2,
        Img_3,
        Img_4,
        Img_5,
        Img_6,
        Img_7,
        Img_8,
        Img_9,
        Img_10,
        Img_11,
        Img_12,
        Img_13,
        Img_14,
        Img_15,
        Img_16,
        Img_17,
        Img_18,
        Img_19,
        Img_20,
        Img_21,
        Img_22,
        Img_23,
        Img_24,
        Img_25,
        Img_26,
        Img_27,
        Img_28,
        Img_29,
        Img_30
        FROM kitties
        WHERE
        id = ?");
    $stmt->bind_param("i", $id);
    $stmt->execute();
    $stmt->store_result();
    $stmt->bind_result($img1, $img2, $img3, $img4, $img5, $img6, $img7, $img8, $img9, $img10, $img11, $img12, $img13, $img14, $img15, $img16, $img17, $img18, $img19, $img20, $img21, $img22, $img23, $img24, $img25, $img26, $img27, $img28, $img29, $img30);
    while ($stmt->fetch()){
        $row[] = array('Img_1' => $img1, 'Img_2' => $img2, 'Img_3' => $img3, 'Img_4' => $img4, 'Img_5' => $img5, 'Img_6' => $img6, 'Img_7' => $img7, 'Img_8' => $img8, 'Img_9' => $img9, 'Img_10' => $img10, 'Img_11' => $img11, 'Img_12' => $img12, 'Img_13' => $img13, 'Img_14' => $img14, 'Img_15' => $img15, 'Img_16' => $img16, 'Img_17' => $img17, 'Img_18' => $img18, 'Img_19' => $img19, 'Img_20' => $img20, 'Img_21' => $img21, 'Img_22' => $img22, 'Img_23' => $img23, 'Img_24' => $img24, 'Img_25' => $img25, 'Img_26' => $img26, 'Img_27' => $img27, 'Img_28' => $img28, 'Img_29' => $img29, 'Img_30' => $img30);
    }
    $num_returns = $stmt->num_rows;
    $stmt->close();
    return ($num_returns);
}

任何建议都将不胜感激。感谢。

1 个答案:

答案 0 :(得分:0)

这不是真正的答案

由于您未提供表boats架构而非kitties架构,因此您要求的内容并不十分清楚。

所以我的猜测是:你对两个表都有唯一的id索引。这意味着当您使用WHERE id = ?查询时,mysql 必须返回1行,因为(正如我所提到的)id是唯一的。

那你的问题是什么?您是否在这些表中有多个具有相同id的记录?你为什么在问题中使用2个不同的表?

尝试澄清你的问题。