出了什么问题?

时间:2016-01-21 15:12:12

标签: php mysqli

我很沮丧。我不知道这里有什么问题。我无法从声明中获得结果,但我从查询中得到了结果!

/// 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版本,对我来说很奇怪。

1 个答案:

答案 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