从mysqli准备好的语句中获取单行数据 [英] Fetch a single row of data from mysqli prepared statement
问题描述
我有以下代码,如果找到 1 行,我想将结果设置为 $aPrds,我该怎么做?
I have the following code and where if 1 row is found I would like to set the result to $aPrds, how can I do this?
$stmt = $db->prepare("select * from products where id=?");
$stmt->bind_param("s", $_GET['id']);
if($stmt->execute())
{
$stmt->store_result();
echo $stmt->num_rows;
if($stmt->num_rows==1)
{
//SET RETURNED ROW TO aPrds
}
else
{
echo "no results or too many found";
}
}
else
{
echo "sql invalid";
}
我也尝试了以下代码,但不成功(返回(空):
I have also tried the following code which has been unsuccessful (returns (null):
$stmt = $db->prepare("select productid, product_name, description from product where productid=?");
$a=1;
$stmt->bind_param("i", $a);
if($stmt->execute()){
$stmt->store_result();
if($stmt->num_rows==1){
$stmt->bind_result($b, $c, $d);
print_r($b);
print_r($c);
print_r($aPrds);
}else{
echo "no result or more than 1 returned";
}
}else{
echo "invalid sql";
}
请注意,我已经测试了 SQL 并且它有效,而且 $db mysqli 连接也肯定有效.
Please note that I have tested the SQL and it works, also the $db mysqli connection is definitely working.
推荐答案
我认为您正在寻找 get_result 和 fetch_assoc 方法:
I think you are looking for the get_result and fetch_assoc methods:
// ....
$result = $stmt->get_result();
$aPrds = $result->fetch_assoc();
// ....
显然这些功能尚不可用(应该已经测试过了,抱歉).所以这是经过测试的:
Apparently these functions are not yet available (should have tested this, sorry). So this is tested:
function bind_array($stmt, &$row) {
$md = $stmt->result_metadata();
$params = array();
while($field = $md->fetch_field()) {
$params[] = &$row[$field->name];
}
call_user_func_array(array($stmt, 'bind_result'), $params);
}
// ....
if($stmt->execute()) {
bind_array($stmt, $row);
$stmt->fetch();
print_r($row);
// ....
如果您在 $stmt->bind_result($b, $c, $d); 之后添加了
$stmt->fetch()
,那么您的第二个解决方案也应该有效;代码>
And you second solution should also work if you added $stmt->fetch()
after $stmt->bind_result($b, $c, $d);
这篇关于从mysqli准备好的语句中获取单行数据的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!