【问题标题】:PDO Invalid number of Parameters bount [duplicate]PDO 无效的参数数量
【发布时间】:2017-03-27 07:47:10
【问题描述】:

我已经在电脑屏幕上启动了好几个小时(Adobe Dreamweaver 的背景是白色的,这无济于事)

问题

我找不到这个错误来挽救我的生命,如果有人能扫描一下并告诉我哪里出错了,我将不胜感激!

需要建议

我是 PDO 的新手,刚刚进行了切换,我正在慢慢掌握它,但是当在 php 中使用带有 PDO 的 mysql 查询时,我正在与调试作斗争。在旧的mysql_* 方法上查找查询错误相当容易,但作为 PDO 新手,我很难调试。 mysql_error() 的关闭 PDO 替代方案是什么?任何帮助和建议表示赞赏。

下面的代码 (请记住我是新手,所以代码可能不是最漂亮的)

$resId = $_POST['resId'];
$name = $_POST['name'];
$surname = $_POST['surname'];                
$coverName = $_POST['coverName'];
$email = $_POST['email'];
$phone = $_POST['phone'];
$carType = $_POST['carGroup'];
$pickupDate = $_POST['pickupDate'];
$pickupTime = $_POST['pickupTime'];          
$returnDate = $_POST['returnDate'];
$returnTime = $_POST['returnTime'];
$rentalPeriode = $interval->format('%d'); //calculates correct


 $sql = 'UPDATE car_reservations SET 
               renter_name = :renter_name, 
               renter_lastname = :renter_lastname, 
               email = :email, 
               phone = :phone, 
               pickup_date = :pickup_date, 
               return_date = :return_date, 
               number_days = :number_days, 
               insurance = :insurance, 
               car_group = :car_group, 
               return_time = :return_time, 
               pickup_time = :pickup_time 
        WHERE res_id = $resId';

$statement = $db->prepare($sql);
$statement->bindValue(':renter_name', $name);
$statement->bindValue('renter_lastname', $surname);
$statement->bindValue(':email', $email);
$statement->bindValue(':phone', $phone);
$statement->bindValue(':pickup_date', $pickupDate);
$statement->bindValue(':return_date', $returnDate);
$statement->bindValue(':number_days', $rentalPeriode);
$statement->bindValue(':insurance', $coverName);
$statement->bindValue('carType', $carType);
$statement->bindValue(':return_time', $returnTime );
$statement->bindValue(':pickup_time', $pickupTime );


$success = $statement->execute();

错误

: Invalid parameter number: parameter was not defined

【问题讨论】:

  • 我见过“罕见”的情况,即省略冒号 ('carType', $carType) 会导致这种情况。所以尝试添加它(':carType', $carType)。编辑:在看到@gabe3886 的评论后,我错了,但我的评论确实“有些道理”。
  • 查询有:car_group,但你绑定carType
  • 您尚未在 sql 查询中定义名为 carType 的占位符,但您仍尝试将值绑定到它。

标签: php mysql pdo


【解决方案1】:

绑定参数时会出现一些不一致的情况。 它应该是这样的:

$sql = 'UPDATE car_reservations SET 
renter_name = :renter_name, 
renter_lastname = :renter_lastname, 
email = :email, 
phone = :phone, 
pickup_date = :pickup_date, 
return_date = :return_date, 
number_days = :number_days, 
insurance = :insurance, 
car_group = :car_group, 
return_time = :return_time, 
pickup_time = :pickup_time 
WHERE res_id = :resId';

$statement = $db->prepare($sql);
$statement->bindValue(':renter_name', $name);
$statement->bindValue(':renter_lastname', $surname);
$statement->bindValue(':email', $email);
$statement->bindValue(':phone', $phone);
$statement->bindValue(':pickup_date', $pickupDate);
$statement->bindValue(':return_date', $returnDate);
$statement->bindValue(':number_days', $rentalPeriode);
$statement->bindValue(':insurance', $coverName);
$statement->bindValue(':car_group', $carType);
$statement->bindValue(':return_time', $returnTime );
$statement->bindValue(':pickup_time', $pickupTime );
$statement->bindValue(':resId', $resId, PDO::PARAM_INT);

另外,$resId 也应该受到保护,在我的 sn-p 上查看 PDO::PARAM_INT 常量的用法,因为您使用的是整数,它不应该被引用。

【讨论】:

  • 为什么将pickup_time设置为$statement->bindValue(':pickup_time', $resId, PDO::PARAM_INT);?没有必要这样设置。编辑:现在您的编辑提到了参数化 resID,但没有设置它
  • 感谢@gabe3886,更新答案
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-07-09
  • 2018-12-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多