我有一个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;
}
感谢大家的帮助。 :)
答案 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);
这是唯一正确的方法