PDO预处理查询,插入


查询
$sql = 'select * from landlord where landlord_name=:landlord_name';
$stmt = $pdo->prepare($sql);
$param=array(
    ':landlord_name'=>$landlord_name
);
$stmt->execute($param);
$row=$stmt->fetch(PDO::FETCH_ASSOC);
插入
$query = "insert into landlord (landlord_name,landlord_pwd,token) values(?,?,?)";
$stmt = $pdo->prepare($query);
$arr = $stmt->execute(array($landlord_name,$landlord_pwd,$token));

<think>我们正在使用PDO实现新闻发布系统用户表的相关操作。根据需求,我们需要:1.创建数据库news2.在news数据库中创建用户表users,表结构包括:id(主键,自增),username(用户名),password(密码),email(邮箱),usertype(用户类型,如:admin,editor,subscriber)3.插入至少3条记录,包括不同用户类型4.按usertype字段进行预处理查询注意:使用PDO时,要确保使用预处理语句以防止SQL注入。步骤:1.连接MySQL(使用PDO)2.创建数据库(如果不存在)3.选择该数据库4.创建表(如果不存在)5.插入记录(使用预处理)6.按usertype查询(使用预处理)我们将编写一个PHP脚本来完成这些操作。为了清晰,我们将分步骤进行,并添加注释。假设MySQL服务器运行在本地,用户名为root,密码为空。实际应用中应使用安全凭证。以下是完整的代码示例:</think> 以下是使用PDO实现新闻发布系统用户表操作的完整代码示例: ### 1. 建库与建表 ```php <?php try { // 连接MySQL(无数据库) $pdo = new PDO('mysql:host=localhost;charset=utf8', 'root', ''); $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); // 创建数据库 $pdo->exec("CREATE DATABASE IF NOT EXISTS news DEFAULT CHARSET=utf8"); $pdo->exec("USE news"); // 创建用户表 $sql = "CREATE TABLE IF NOT EXISTS users ( id INT AUTO_INCREMENT PRIMARY KEY, username VARCHAR(50) NOT NULL UNIQUE, password VARCHAR(255) NOT NULL, email VARCHAR(100) NOT NULL, usertype ENUM('admin', 'editor', 'subscriber') DEFAULT 'subscriber', created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP )"; $pdo->exec($sql); echo "数据库和表创建成功!\n"; } catch (PDOException $e) { die("数据库错误: " . $e->getMessage()); } ?> ``` ### 2. 插入测试数据 ```php <?php try { $pdo = new PDO('mysql:host=localhost;dbname=news;charset=utf8', 'root', ''); // 预处理插入语句 $stmt = $pdo->prepare("INSERT INTO users (username, password, email, usertype) VALUES (:user, :pass, :email, :type)"); // 插入三条测试记录 $users = [ ['user' => 'admin_john', 'pass' => password_hash('admin123', PASSWORD_DEFAULT), 'email' => 'john@news.com', 'type' => 'admin'], ['user' => 'editor_lisa', 'pass' => password_hash('edit456', PASSWORD_DEFAULT), 'email' => 'lisa@news.com', 'type' => 'editor'], ['user' => 'reader_mike', 'pass' => password_hash('user789', PASSWORD_DEFAULT), 'email' => 'mike@news.com', 'type' => 'subscriber'] ]; foreach ($users as $user) { $stmt->execute($user); } echo "插入3条用户记录成功!\n"; } catch (PDOException $e) { die("插入错误: " . $e->getMessage()); } ?> ``` ### 3. 按用户类型查询 ```php <?php try { $pdo = new PDO('mysql:host=localhost;dbname=news;charset=utf8', 'root', ''); // 预处理查询 $type = 'editor'; // 可替换为需要查询的类型 $stmt = $pdo->prepare("SELECT * FROM users WHERE usertype = :type"); $stmt->bindParam(':type', $type, PDO::PARAM_STR); $stmt->execute(); // 获取结果 $results = $stmt->fetchAll(PDO::FETCH_ASSOC); echo "用户类型 {$type} 的查询结果:\n"; print_r($results); } catch (PDOException $e) { die("查询错误: " . $e->getMessage()); } ?> ``` ### 运行结果示例 ``` 数据库和表创建成功插入3条用户记录成功! 用户类型 editor 的查询结果: Array ( [0] => Array ( [id] => 2 [username] => editor_lisa [password] => $2y$10$Xc9bDjuZJZQ... [email] => lisa@news.com [usertype] => editor [created_at] => 2023-05-15 10:30:45 ) ) ``` ### 关键要点说明 1. **预处理语句**:所有SQL操作均使用PDO预处理语句,有效防止SQL注入 2. **密码安全**:使用`password_hash()`进行密码加密存储[^1] 3. **用户类型约束**:使用ENUM类型确保字段值合法性 4. **自动时间戳**:`created_at`字段自动记录注册时间 5. **错误处理**:使用PDO异常模式捕获数据库错误 [^1]: password_hash使用Bcrypt算法,自动生成salt,符合当前安全最佳实践
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值