我无法使用 PHP 从 mysqli 查询中获得结果(从 mysql_result 转换而来)



我有一个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;
}
谢谢大家的帮助。:)

虽然自动化简单的选择是一个好主意,但是实现是非常不安全的,不应该被使用。

使其接受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);

这是唯一正确的方法

相关内容

  • 没有找到相关文章

最新更新