【问题标题】:What's going wrong?怎么了?
【发布时间】:2016-01-21 15:12:12
【问题描述】:

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

/// 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- 我按照 php 手册 获取 result_metadata

3- 我不知道为什么get_result() 不起作用。看起来mysqlnd 没有安装。由于我的 php 版本,对我来说很奇怪。

【问题讨论】:

  • 我相信你需要在这里使用 fetch_assoc
  • php.net/manual/en/mysqli-stmt.result-metadata.php 您正在获取数据 ABOUT 结果,而不是表本身的实际数据。例如select name from contacts 将在您获取结果字段时返回 name = John Doe,而在您获取元数据时将返回 field name is "name", type is "varchar"

标签: php mysqli


【解决方案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

【讨论】:

  • 感谢您的回答。实际上,为了更好地理解,我不会粘贴整个代码。我绑定参数。
  • 感谢您的宝贵时间。但 get_result 在这里不起作用。也在我的服务器(老爹)。我收到此错误:致命错误:调用未定义的方法 mysqli_stmt::get_result()
  • 方法是get_result(),不带“s”。尝试删除“s”,使其显示为$stmt->get_result()
  • 相同。这是我的打字错误;)
猜你喜欢
  • 1970-01-01
  • 2020-07-01
  • 2015-06-29
  • 2012-09-05
  • 2021-06-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多