我无法从PHP获得mysqli查询的结果(从mysql_result转换)

时间:2013-04-11 15:20:40

标签: php mysql mysqli procedural

我有一个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,我会看到身份证号码。

我没有收到查询错误。

解决:

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

工作代码:

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

感谢大家的帮助。 :)

1 个答案:

答案 0 :(得分: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);

这是唯一正确的方法