我很沮丧。我不知道这里有什么问题。我无法从声明中获得结果,但我从查询中得到了结果!
/// query
$query = "SELECT * FROM tbl_token WHERE tbl_token.id = 1" ;
$results = $mysqli->query($query);
$row = $results->fetch_row();
var_dump($row); /// it works!
/// with statement
$stmt = $mysqli->prepare("SELECT * FROM tbl_token WHERE tbl_token.id = 1");
$stmt->execute();
$result = $stmt->result_metadata();
$row = $result->fetch_row();
var_dump($row); /// it doesn't work. It is null.
我的php版本是5.5.9。
更新
1- fetch_field
工作,但我想在这里得到整排。
2-我跟着result_metadata
的 php手册。
3-我不知道为什么get_result()
不起作用。看mysqlnd
没有安装。由于我的php版本,对我来说很奇怪。
答案 0 :(得分:-1)
我设置了一个测试环境来复制您的问题,并找到了解决方案。
运行$stmt->execute()
后,必须使用$stmt->bind_result($var);
绑定语句的结果,其中$var
是要填充MySQL行数据的变量。
绑定结果后,运行$stmt->fetch();
以将结果数据提取到$var
。在此之后,回显$var
应显示您需要的结果。
您的新代码应如下所示:
$stmt = $mysqli->prepare("SELECT * FROM tbl_token WHERE tbl_token.id = 1");
$stmt->execute();
$stmt->bind_result($result);
$stmt->fetch();
var_dump($result); // should display 'string(1) "1"'
<强>更新强>
在回答您的问题更新时,如果要从一行中获取所有列,则只需在$stmt->bind_result()
命令中指定其他变量即可。示例:$stmt->bind_result($col1, $col2, $col3)
(您可能需要更多$col
个变量,具体取决于您尝试从表中提取数据的列数。 $stmt->fetch()
应使用fetch()
'd行的相应列数据填充所有这些变量。 - http://php.net/manual/en/mysqli-stmt.bind-result.php