Php 将mysqli转换为pdo bind_all
这是我目前的代码Php 将mysqli转换为pdo bind_all,php,pdo,mysqli,Php,Pdo,Mysqli,这是我目前的代码 function getUserDetails($username=NULL, $id=NULL) { if($username!=NULL) { $column = "user_name"; $data = $username; } elseif($id!=NULL) { $column = "id"; $data = $id; } global $db; $q
function getUserDetails($username=NULL, $id=NULL) {
if($username!=NULL) {
$column = "user_name";
$data = $username;
}
elseif($id!=NULL) {
$column = "id";
$data = $id;
}
global $db;
$query = $db->prepare("SELECT id, username, permissions, forename, surname, password, email, courseid, choiceid, lastlogin, active FROM users WHERE $column = :column");
$query->bindParam(":column", $data);
$query->execute();
$query->bind_result ($id, $username, $permissions, $forename, $surname, $password, $email, $courseid, $choiceid, $lastlogin, $active);
while ($query->fetch()){
$row = array('id' => $id, 'userlevel' => $permissions, 'username' => $username, 'forename' => $forename, 'surname' => $surname, 'password' => $password, 'email' => $email, 'courseId' => $courseid, 'choiceId' => $choiceId, 'lastlogin' => $lastlogin, 'active'=> $active);
}
return ($row);
}
我一直在尝试将其转换为pdo,因为我发现bind_result与pdo不兼容-有人能帮我做些什么吗
我在arround看到我应该用fetch?但我真的很困惑
[编辑]
我试过这个:
function getUserDetails($username=NULL,$id=NULL) {
if($username!=NULL) {
$column = "user_name";
$data = $username;
}
elseif($id!=NULL) {
$column = "id";
$data = $id;
}
global $db;
$query = $db->prepare("SELECT id, username, permissions, forename, surname, password, email, courseid, choiceid, lastlogin, active FROM users WHERE $column = :column");
$query->bindParam(":column", $data);
$query->execute();
$results = array();
while ($row = $query->fetch(PDO::FETCH_ASSOC)) {
$results[] = $row;
}
return ($results);
}
这是朝着正确的方向迈出的一步吗
[编辑二]
将我的代码更新为:
function getUserDetails($username) {
global $db;
$query = $db->prepare("SELECT * FROM users WHERE username = :username");
$query->bindParam(":username", $username);
return $query->fetch(PDO::FETCH_ASSOC);
}
$username = 'uname';
$result = getUserDetails($username);
print_r($result);
但是它什么也不打印。用户名肯定存在
我尝试了一个带有虚拟数据的测试数据库
$data = '2';
$sth = $db->prepare("SELECT * FROM test WHERE id = :id");
$sth->bindParam(":id", $data);
$sth->execute();
$result = $sth->fetch(PDO::FETCH_ASSOC);
print_r($result);
我正在试图弄清楚如何访问打印阵列中的内容:
阵列显示为
Array ( [Id] => 2 [Name] => tom )
我(例如)怎么做
当我尝试那个代码时,我得到了
Notice: Undefined index: name in <directory>\test.php on line 67
它给了我正确的答案!
谢谢你的帮助是的这是朝着正确方向迈出的伟大一步。
正如您所看到的,mysqli在绑定占位符和返回结果的中完全不可用于准备好的语句。
而PDO可以用更少的代码解决您的问题。
您根本不需要使用PDO进行无用的绑定-只需使用fetchAll()获取所有结果即可: 但是等等。如果是用户详细信息,为什么要返回数组? 它只会向返回的数组添加无用的维度。 就在这种情况下,让它
return $query->fetch();
而不是fetchAll()。但是您需要很多行-使用后一种方法。
关于其他方法和有用的连接选项,请参阅如何调用结果?我试图通过“$userdetails=getUserDetails($username);$echo$userdetails['forename'];”获得结果,我将代码更新为:函数getUserDetails($username){global$db;$query=$db->prepare(“SELECT*FROM username=:username”);$query->bindParam(“:username”,$username);return$query->->fetch(PDO::fetch_ASSOC);}$username='uname'$结果=getUserDetails($username);打印(结果);但是当我尝试打印结果时,它的空[EDIT]将代码添加到我的原始问题中,以便于阅读感谢您的帮助!我想出来了D1。您需要使用我在回答中链接到的标记wiki的连接选项来获取错误。2.您需要考虑字段名。如果是
用户名
,用户名
,名称
或名称
function getUserDetails($username) {
global $db;
$sth = $db->prepare("SELECT id, username, permissions, forename, surname, password, email, courseid, choiceid, lastlogin, active FROM users WHERE username = :username");
$sth->bindParam(":username", $username);
$sth->execute();
$result = $sth->fetch(PDO::FETCH_ASSOC);
return $result;
}
$username = 'un';
$userdetails = getUserDetails($username);
echo $userdetails['forename'];
function getUserDetails($username=NULL,$id=NULL) {
if ($username) {
$column = "user_name";
$data = $username;
} elseif($id) {
$column = "id";
$data = $id;
} else {
return;
}
global $db;
$query = $db->prepare("SELECT * FROM users WHERE $column = ?");
$query->execute(array($data));
return $query->fetchAll();
}
return $query->fetch();