获得准备好的MySQL语句(最多一行)的结果的最佳方法

时间:2018-10-09 11:08:47

标签: php mysql mysqli prepared-statement resultset

我通常使用以下代码读取/获取准备好的MySQL SELECT的结果:

$sqlname = $conn->prepare("SELECT name FROM test1 WHERE test2 = ?");
$sqlname->bind_param('s',$test);
$sqlname->execute();
$result = $sqlname->get_result();
if ($result->num_rows > 0) {
    while($row = $result->fetch_assoc()) {   
        $testname = $row['name'];
    }
}

但是当我知道结果中只会有一行时:我是否必须对fetch_assoc使用while循环还是有更好的方法?

1 个答案:

答案 0 :(得分:0)

当您知道要在结果集中返回的列的名称时,可以将结果绑定到一个输出变量上-我认为这会使处理工作变得更好一些。

if (!$stmt = $conn->prepare("SELECT name FROM test1 WHERE test2 = ?")) {
    echo "Prepare Syntax Error"; // $conn->error
} elseif (!$stmt->bind_param("s", $test) || !$stmt->execute() || !$stmt->bind_result($name)) {
    echo "Statement Error"; // $stmt->error
} else {
    $stmt->fetch();
    var_export($name);  // this will show the value or NULL
}

或者如果您不想将结果值绑定到变量:

...
} elseif (!$stmt->bind_param("s", $test) || !$stmt->execute() || !$result = $stmt->get_result()) {
    echo "Statement Error"; // $stmt->error
} elseif (!$row = $result->fetch_row()) {  // No need to use assoc() keys
    echo "empty result";
} else {
    var_export($row[0]);  // access the first column value
}