0

我有一个 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;
}

感谢大家的帮助。:)

4

1 回答 1

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);

这是唯一正确的方法

于 2013-04-11T15:30:21.180 回答