我有一个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);
这是唯一正确的方法