好吧,即使在尝试转换所有内容后的2天内,我仍然很难掌握PDO。
我现在正处于为$user_data['???']
创建数组的阶段。这就是我所拥有的。
if (logged_in() === true) {
$session_user_id = $_SESSION['user_id'];
$user_data = user_data($session_user_id, 'id', 'username', 'password', 'email', 'active', 'coins');
$user_id = $user_data['id'];
if (user_active($user_data['username'] === false) {
session_destroy();
header('Location: index.php');
exit();
}
}
这就是我获取$user_data['???']
数据的方式。随身携带的功能是..
function user_data($user_id){
$data = array();
$user_id = (int)$user_id;
$func_num_args = func_num_args();
$func_get_args = func_get_args();
if ($func_num_args > 1) {
unset($func_get_args[0]);
$fields = '`' . implode('`, `', $func_get_args) . '`';
$data = //mysql_fetch_assoc(//mysql_query("SELECT $fields FROM `users` WHERE `user_id` = $user_id"));
return $data;
}
}
function user_active($username) {
$username = sanitize($username);
$query = //mysql_query("SELECT COUNT(`user_id`) FROM `users` WHERE `username` = '$username' AND `active` = 1");
return (//mysql_result($query, 0) == 1) ? true : false;
}
我正在试图弄清楚如何将其转换为PDO,有人能给我任何帮助吗?
此外,在我将其转换为PDO之后。如果用Welcome <?php $user_data['username'] ?>, Hope you enjoy your stay!
的简单消息来欢迎用户,或者我现在需要使用完全不同的方法,是否会这么简单?
提前致谢!
答案 0 :(得分:2)
因此,通过示例代码的外观,我得到的结论是您正在从已弃用的mysql扩展迁移到PDO。
mysql扩展可能会让你失望的是,如果你没有指定mysql链接资源mysql_query
,它会使用由mysql_connect
创建的最后创建的链接资源。一旦您转向使用PDO,您将不得不在user_data
和user_active
函数中使用PDO连接。最简单的方法是在每个函数中创建一个PDO连接,它非常重复,根本不是一个好的解决方案,但它可以工作。
代码中存在sql injection个漏洞的问题。除此之外,您可以编写如下函数:
<?php
function user_data($user_id){
$data = array();
$user_id = (int)$user_id;
$func_num_args = func_num_args();
$func_get_args = func_get_args();
if ($func_num_args > 1) {
unset($func_get_args[0]);
// connect to the DB
$dsn = 'mysql:dbname=<your_db_name>;host=127.0.0.1';
$user = '<your_db_user>';
$password = '<your_db_user_password>';
$dbh = new PDO($dsn, $user, $password);
// request the data
$fields = '`' . implode('`, `', $func_get_args) . '`';
$sql = sprintf('select %s from users where user_id = ? limit 1', $fields);
$stmt = $dbh->prepare($sql);
$stmt->execute(array($userid));
$data = $stmt->fetch(PDO::FETCH_ASSOC);
return $data;
}
}
function user_active($username) {
$username = sanitize($username);
// connect to the DB
$dsn = 'mysql:dbname=<your_db_name>;host=127.0.0.1';
$user = '<your_db_user>';
$password = '<your_db_user_password>';
$dbh = new PDO($dsn, $user, $password);
$sql = 'select count(user_id) from users where username = ? and active';
$stmt = $dbh->prepare($sql);
$stmt->execute(array($username));
return $stmt->fetchColumn() == 1;
}
希望它有所帮助。
答案 1 :(得分:0)
首先,您必须使用连接。 PDO是OO:
$db = new PDO("mysql:host=127.0.0.1;dbname=somedb",'root');
然后你得到行:
$rows = $db->query('select name from People');
你的功能应该是这样的:
function user_data($user_id,$db){
$data = array();
$user_id = (int)$user_id;
$func_num_args = func_num_args();
$func_get_args = func_get_args();
if ($func_num_args > 1) {
unset($func_get_args[0]);
$fields = '`' . implode('`, `', $func_get_args) . '`';
$data = $db->query("SELECT $fields FROM `users` WHERE `user_id` = $user_id");
return $data;
}
}
function user_active($username,$db) {
$username = sanitize($username);
$data = $db->query("SELECT COUNT(`user_id`) qtd FROM `users` WHERE `username` = '$username' AND `active` = 1");
return ($data['qtd'] == 1) ? true : false;
}
其中$ db是具有有效连接的PDO实例。所以,如果我们有一个脚本来调用函数,它应该是这样的:
<?php
import "file_where_functions_are_defined.php";
$db = new PDO("mysql:host=127.0.0.1;dbname=somedb",'root');
$user_data = user_data(1,$db);
?>