【问题标题】:I can't get result from mysqli query with PHP (converted from mysql_result)我无法使用 PHP 从 mysqli 查询中获取结果(从 mysql_result 转换)
【发布时间】:2013-04-11 15:20:39
【问题描述】:

我有一个 PHP 函数,我正在从使用 mysql 扩展名转换为 mysqli 扩展名。

一切都很好,直到这里。我以前使用 mysql_result 来获取单条数据。 mysqli中没有直接的等价物,所以我尝试了以下但仍然不起作用。

function getdbvalue($table,$value,$idfield,$id) {
  $qrytext = "SELECT $value FROM $table WHERE $idfield LIKE '$id'";
  $valueqry = mysqli_query($dbh,$qrytext);
  if (FALSE === $valueqry) die("Select failed: ".mysqli_error);
  $result = mysqli_fetch_row($valueqry);
  $returnvalue = $result[0];
  return $returnvalue;
}

我已经验证变量可以正常传递给函数,并且函数实际上正在被触发。如果我返回 $id,我会看到 ID 号。

我没有收到查询错误。

已解决:

我需要在函数中将数据库连接变量添加为全局变量:

工作代码:

function getdbvalue($table,$value,$idfield,$id) {
  global $dbh; // This was missing!
  $qrytext = "SELECT $value FROM $table WHERE $idfield LIKE '$id'";
  $valueqry = mysqli_query($dbh,$qrytext);
  if (FALSE === $valueqry) die("Select failed: ".mysqli_error);
  $result = mysqli_fetch_row($valueqry);
  $returnvalue = $result[0];
  return $returnvalue;
}

感谢大家的帮助。 :)

【问题讨论】:

  • 如果你改变喜欢 for = ??
  • 尝试var_dump$result
  • @RobertRozas LIKE 和 = 之间没有变化
  • 尽管您从 mysql_ 切换到 mysqli,但您确实应该使用 PDO,因为它更好
  • @ChrisCooney 返回 NULL

标签: php mysql mysqli procedural


【解决方案1】:

虽然自动化简单的选择是个好主意,但该实现高度不安全,永远不应该使用。

使其接受 SQL 查询和参数。它将使其安全。
而且你必须使用PDO 而不是mysqli

function getdbvalue() {
  global $pdo;
  $args = func_get_args();
  $sql  = array_shift($args);
  $stm  = $pdo->prepare($sql);
  $stm->execute($args);
  return $stm->fetchColumn();
}

必须这样使用(必须先连接PDO):

$name = getdbvalue("SELECT name FROM users WHERE id=?", $is);

这是唯一正确的方法

【讨论】:

  • 通常我认为 mysqli 也可以做到这一点,但它需要如此多的样板和绒毛,因此 PDO 确实是易于使用的更好选择(而且,数组准备要容易得多)跨度>
  • 即使我自己找到了答案,我也会检查你的答案,因为它包含对我来说是个问题的全局 $pdo 行。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-08-09
  • 1970-01-01
  • 2021-07-23
  • 2017-07-24
相关资源
最近更新 更多