gpt4 book ai didi

php - 从 MySQL 到 PDO - 存储用户指定的日期字段

转载 作者:行者123 更新时间:2023-11-29 13:36:40 25 4
gpt4 key购买 nike

我有一个个人资料页面,它是用现已弃用的 php 代码编写的。切换到 PDO 并不断学习。我一直遇到这个问题,我的日期字段不会存储在数据库中。我发现一个解决方案可以解决问题(将 mysql_real_escape_string 添加到日期变量),但是我被告知这不是 PDO。

我的代码正确吗?这是一种安全有效的格式化表单提交选项的方法吗?

//----------
//--My Submit Statement
//----------

<?php if (isset($_POST['submit'])) {
$user_id = ( $_POST["user_id"] );
$length = ( $_POST["length"] );
$ground = ( $_POST["ground"] );
$date = mysql_real_escape_string( $_POST["date"]);
$query = "INSERT INTO admin (user_id,`length`,`ground`,`date`) VALUES $user_id,$length,$ground,'".mysql_real_escape_string($date)."')";
$q = $pdo->prepare($query);
$q->execute(array('user_id'=>$user_id,':length'=>$length,':ground'=>$ground,':date'=>$date));
}
?>

日期是用户指定的。

//----------
//--My Call Statement
//----------

<?php
$query = "SELECT * FROM admin WHERE user_id = '$userid'";
$q = $pdo->query($query);
while ($row = $q->fetch()){
?>
//Edited out beginning of table
<tr>
<td><?php echo $row['date']; ?> </td>
<td><?php echo $row['length']; ?><?php if ($selected == 'metric') { echo "cm"; } else { echo "in"; } ?>
</td>
<td><?php echo $row['ground']; ?><?php if ($selected == 'metric') { echo "cm"; } else { echo "in"; } ?>
//Edited out bottom of table

最佳答案

PDO(和 MySQLi)带来了准备好的语句和参数绑定(bind),这远远优于查询字符串连接(这就是您正在使用的)。

您似乎正在尝试通过调用 PDOStatement::execute 进行参数绑定(bind),但您已经将值注入(inject)到查询字符串中,并且没有参数占位符。

这是一个使用占位符的示例

$query = 'INSERT INTO admin (user_id,`length`,`ground`,`date`) VALUES (:user_id, :length, :ground, :date)';
$stmt = $pdo->prepare($query);
$stmt->execute(array(
':user_id' => $_POST['user_id'],
':length' => $_POST['length'],
':ground' => $_POST['ground'],
':date' => $_POST['date']
));

您还可以使用 PDOStatement::bindParam 单独绑定(bind)参数(而不是在 PDOStatement::execute 中),例如

$stmt->bindParam(':user_id', $_POST['user_id']);
$stmt->bindParam(':length', $_POST['length']);
// etc

$stmt->execute();

如果您感兴趣(您应该感兴趣),这里有大量有关准备好的参数化语句的信息。这将是一个好的开始

更新

您需要在 SELECT 查询中执行相同的操作,例如

$stmt = $pdo->prepare('SELECT * FROM admin WHERE user_id = :user_id');
$stmt->bindParam(':user_id', $user_id);
$stmt->execute();
while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) {

关于php - 从 MySQL 到 PDO - 存储用户指定的日期字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18649663/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com