【问题标题】:PHP AJAX - Uncaught PDOException: SQLSTATE[HY093], what is this?PHP AJAX - 未捕获的 PDOException:SQLSTATE[HY093],这是什么?
【发布时间】:2022-01-07 23:13:18
【问题描述】:

我查看了stackoverflow,有很多这样的问题。但我似乎无法找到代码中缺少的内容。

Fatal error: Uncaught PDOException: SQLSTATE[HY093]: Invalid parameter number: number of bound variables does not match number of tokens in C:\xampp\htdocs\backend\cases\traffic\traffic-insert.php:95 Stack trace: #0 C:\xampp\htdocs\backend\cases\traffic\traffic-insert.php(95): PDOStatement->execute(Array) #1 C:\xampp\htdocs\router.php(51): include_once('C:\\xampp\\htdocs...') #2 C:\xampp\htdocs\router.php(9): route('/traffic-insert', '/backend/cases/...') #3 C:\xampp\htdocs\routes.php(24): post('/traffic-insert', '/backend/cases/...') #4 {main} thrown in C:\xampp\htdocs\backend\cases\traffic\traffic-insert.php on line 95

解决此问题后出现此错误:
PHP AJAX - data update/edit inserts as new data instead of updating

代码如下:

<?php

include('./backend/config/connection.php');
include('./backend/config/function.php');

   if( isset($_POST["traffic_operation"]) ) {
       if( $_POST["traffic_operation"] == "Add" ) {
              $traffic_doc = '';
       
              if( $_FILES["traffic_doc"]["name"] != '') {
                     $traffic_doc = upload_image();
              }
              $statement = $connection->prepare('INSERT INTO traffic_violations (
                     plateNumber,
                     carModel,
                     carColor,
                     violationType,
                     ownerGender,
                     violationDateTime,
                     violationLocation,
                     workingShift,
                     violationAction,
                     violationStatement,
                     cccEmployee
              ) VALUES (
                     :plate_number,
                     :car_model,
                     :car_color,
                     :violation_type,
                     :owner_gender,
                     :violation_date,
                     :violation_location,
                     :working_shift,
                     :violation_action,
                     :traffic_doc,
                     :ccc_employee
                     )
              ');
              $result = $statement->execute(
                     array(
                            ':plate_number' => $_POST["plate_number"],
                            ':car_model' => $_POST["car_model"],
                            ':car_color' => $_POST["car_color"],
                            ':violation_type' => $_POST["violation_type"],
                            ':owner_gender' => $_POST['owner_gender'],
                            ':violation_date' => $_POST['violation_date'],
                            ':violation_location' => $_POST['violation_location'],
                            ':working_shift' => $_POST['working_shift'],
                            ':violation_action' => $_POST['violation_action'],
                            ':traffic_doc' => $traffic_doc,
                            ':ccc_employee' => $_POST['ccc_employee']
                     )
              );
                     if( !empty($result) ) {
                            echo '<script>alert("Traffic Violation Added")</script>';
                     }
       }

       if( $_POST["traffic_operation"] == "Edit" ) {
              $traffic_doc = '';

              if( $_FILES["traffic_doc"]["name"] != '') {
                     $traffic_doc = upload_image();
              } else {
                     $traffic_doc = $_POST['hidden_user_image'];
              }

              $statement = $connection->prepare('UPDATE traffic_violations SET
                     plateNumber = :plate_number,
                     carModel = :car_model,
                     carColor = :car_color,
                     violationType = :violation_type,
                     ownerGender = :owner_gender,
                     violationDateTime = :violation_date,
                     violationLocation = :violation_location,
                     workingShift = :working_shift,
                     violationAction = :violation_action,
                     violationStatement = :traffic_doc,
                     cccEmployee = :ccc_employee,
                     WHERE id = :id'
                     );
                     $statement->execute(
                            array(
                                   'id' => $_POST["violation_id"],
                                   ':plate_number' => $_POST["plate_number"],
                                   ':car_model' => $_POST["car_model"],
                                   ':car_color' => $_POST["car_color"],
                                   ':violation_type' => $_POST["violation_type"],
                                   ':owner_gender' => $_POST['owner_gender'],
                                   ':violation_date' => $_POST['violation_date'],
                                   ':violation_location' => $_POST['violation_location'],
                                   ':working_shift' => $_POST['working_shift'],
                                   ':violation_action' => $_POST['violation_action'],
                                   ':traffic_doc' => $traffic_doc,
                                   ':ccc_employee' => $_POST['ccc_employee']
                            )
                     );
                     echo 'Traffic Violation Updated';
       }
   }
?>

【问题讨论】:

  • 很多缺失的: 在像carModel = car_model, 这样的行中应该是carModel = :car_model, 所以它只是一个TYPO,奇怪的是第一列和最后一列是正确的,但所有中间是错的
  • 帮助我们帮助您 - 分享您的代码
  • @CBroe 如果您是英国人,那么它对您来说可能看起来像是简单的英语,但如果英语不是您的母语,则很难理解。诸如“绑定变量”和“令牌”之类的东西不会立即响起。 ADyson 写的要清楚得多。 PHP 错误消息可能非常深奥。
  • RiggsFolly 已经解释了您的问题。缺少:s 使它看起来像您没有指定参数的 PDO,因此有关参数数量与变量数量不匹配的错误。这本来可以通过更仔细地研究其他人(工作)的 PDO 代码示例来解决……不过,自从 Riggs 发表评论后,您是否再次编辑了帖子?
  • 另一个错字:'id' =&gt; $_POST["violation_id"] 缺少:。将其与所有其他人进行比较。并学会更仔细地仔细检查你的工作......注意细节是程序员的一项重要技能。

标签: php pdo


【解决方案1】:

问题在于逗号:

cccEmployee = :ccc_employee,
WHERE id = :id'

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-01-19
    • 1970-01-01
    • 2021-12-13
    • 2019-07-09
    • 1970-01-01
    • 1970-01-01
    • 2019-12-17
    相关资源
    最近更新 更多