Php 添加顺序时出错:SQLSTATE[HY093]:参数编号无效:绑定变量的数量与令牌的数量不匹配

Php 添加顺序时出错:SQLSTATE[HY093]:参数编号无效:绑定变量的数量与令牌的数量不匹配,php,sql,Php,Sql,嘿,伙计们,我很想得到你们对下面代码的帮助,我对php和sql非常陌生,我正试图在订单签出过程中屏蔽这些值。我需要从多个页面中获取信息 我已经看了这个代码好几个小时了,我无法找到哪里出了问题。。。 这可能是因为我真的不确定我需要在哪里解决这个问题。任何帮助或建议都会大有帮助 function writeOrderToDatabase(){ // open database connection include 'includes/connection.php'; // store ord

嘿,伙计们,我很想得到你们对下面代码的帮助,我对php和sql非常陌生,我正试图在订单签出过程中屏蔽这些值。我需要从多个页面中获取信息

我已经看了这个代码好几个小时了,我无法找到哪里出了问题。。。 这可能是因为我真的不确定我需要在哪里解决这个问题。任何帮助或建议都会大有帮助

function writeOrderToDatabase(){
 // open database connection
 include 'includes/connection.php';

 // store order date in Australian format for printouts etc
 $_SESSION['orderDate'] = date('d-m-Y');

try{
 // create our sql insert orders statement
  $sql = "INSERT INTO orders SET orderNbr=: orderNbr,custNbr=:custNbr,orderDate=:orderDate, OrderNetValue=:OrderNetValue,deliverTo = :deliverTo, 
  deliveryAddress1 = :deliveryAddress1, deliveryAddress2 = :deliveryAddress2, deliverySuburb = :deliverySuburb, 
  deliveryState = :deliveryState, deliveryPostCode = :deliveryPostCode, deliverySuburb = :deliverySuburb, deliveryState = :state, deliveryPostCode = :deliveryPostCode, deliveryInstructions = :deliveryInstructions, shippingValue=:shippingValue,  
  paymentType=:paymentType, paymentRef=:paymentRef;";

 // prepare the statement
 $statement = $pdo->prepare($sql);
$orderNbr = 0;
 // bind the values

 $statement->bindValue(':orderDate', date('Y-m-d'));
 $statement->bindValue(':custNbr', $_SESSION['custNbr']);
 $statement->bindValue(':dispatchDate', $_SESSION['dispatchDate']);
 $statement->bindValue(':deliveryDate', $_SESSION['deliveryDate']);
 $statement->bindValue(':OrderNetValue', $_SESSION['OrderNetValue']);
 $statement->bindValue(':deliverTo', $_SESSION['deliverTo']);
 $statement->bindValue(':deliveryAddress1', $_SESSION['deliveryAddress1']);
 $statement->bindValue(':deliveryAddress2', $_SESSION['deliveryAddress2']);
 $statement->bindValue(':deliverySuburb', $_SESSION['deliverySuburb']);
 $statement->bindValue(':deliveryState', $_SESSION['deliveryState']);
 $statement->bindValue(':deliveryPostCode', $_SESSION['deliveryPostCode']);
 $statement->bindValue(':deliveryInstructions', $_SESSION['deliveryInstructions']);
 $statement->bindValue(':shippingValue', $_SESSION['shippingValue']);
 $statement->bindValue(':paymentType', $_SESSION['paymentType']);
 $statement->bindValue(':paymentRef', $_SESSION['paymentRef']);
 $statement->bindValue(':sellingPrice', $_SESSION['sellingPrice']);
  $statement->bindValue(':newQtyOnHand', $_SESSION['newQtyOnHand']);
 // execute the statement
 $success = $statement->execute();
 } // end try


 catch (PDOException $e) {
 echo 'Error adding order: ' . $e->getMessage();
 exit();
 } // end catch

 // test the result and get order nbr just created or display appropriate message
 if ($success) {
echo $sql = 'SELECT orderNbr FROM orders ORDER BY orderNbr';
    foreach ($conn->query($sql) as $row) {
        print $row['orderNbr'] . "\t";

   }

 }
 else {
 die("<p>Unable to retreive Order Nbr </p>");
 }

 // read cart and insert orderedItem record(s) and update stock on hand in product records
 foreach($_SESSION['cart'] as $prodNbr => $value) {
 // store required details in variables
 $qtyOrdered = $_SESSION['cart'][$prodNbr]['qtyOrdered'];
 $qtyOnHand = $_SESSION['cart'][$prodNbr]['qtyOnHand'];
 $sellingPrice = $_SESSION['cart'][$prodNbr]['price'];

 try {
 // create orderedItem table sql insert statement
  $sql = "INSERT INTO orderedItem SET orderNbr=:custNbr,prodNbr=: prodNbr, qtyOrdered=:qtyOrdered,sellingPrice = :sellingPrice;";
 } // end try

 catch (PDOException $e) {
 echo 'Error adding orderedItem: ' . $e->getMessage();
 exit();
 } // end catch

 // test the result and display appropriate message
 if (!$success) {
 die("<p>Unable to execute the orderedItem table insert</p>");
 }

 // create new quantity on hand value for the product record
 $newQtyOnHand = $qtyOnHand - $qtyOrdered;


 try {
 // create product table sql update statement
$sql="UPDATE product SET prodNbr= :prodNbr,prodName= :prodName,price= :price,qtyOnHand= :qtyOnHand,description= :description, photo= :photo,thumbNail= :thumbNail ,suppCode= :suppCode ;";
 } // end try

 catch (PDOException $e) {
 echo 'Error updating product qtyOnHand: ' . $e->getMessage();
 exit();
 } // end catch
 // test the result and display appropriate message
 if (!$success) {
 die("<p>Unable to execute the product table update</p>");
 }
 } // end of foreach
 } // end of function
函数writeOrderToDatabase(){
//开放数据库连接
包括“includes/connection.php”;
//以澳大利亚格式存储订单日期,用于打印输出等
$\会话['orderDate']=日期('d-m-Y');
试一试{
//创建sql insert orders语句
$sql=“插入订单集orderNbr=:orderNbr,custNbr=:custNbr,orderDate=:orderDate,OrderNetValue=:OrderNetValue,deliverTo=:deliverTo,
deliveryAddress1=:deliveryAddress1,deliveryAddress2=:deliveryAddress2,Delivery郊区=:Delivery郊区,
deliveryState=:deliveryState,deliveryPostCode=:deliveryPostCode,Delivery郊区=:Delivery郊区,deliveryState=:state,deliveryPostCode=:deliveryPostCode,deliveryInstructions=:deliveryInstructions,shippingValue=:shippingValue,
paymentType=:paymentType,paymentRef=:paymentRef;“;
//准备声明
$statement=$pdo->prepare($sql);
$orderNbr=0;
//绑定值
$statement->bindValue(':orderDate',date('Y-m-d');
$statement->bindValue(':custNbr',$\u会话['custNbr']);
$statement->bindValue(':dispatchDate',$\会话['dispatchDate']);
$statement->bindValue(':deliveryDate',$会话['deliveryDate']);
$statement->bindValue(':OrderNetValue',$\u会话['OrderNetValue']);
$statement->bindValue(':deliverTo',$\u SESSION['deliverTo']);
$statement->bindValue(':deliveryAddress1',$\u会话['deliveryAddress1']);
$statement->bindValue(':deliveryAddress2',$\u会话['deliveryAddress2']);
$statement->bindValue(“:delivery郊区“,$\u会话['delivery郊区]);
$statement->bindValue(':deliveryState',$\u会话['deliveryState']);
$statement->bindValue(':deliveryPostCode',$\u会话['deliveryPostCode']);
$statement->bindValue(':deliveryInstructions',$\u会话['deliveryInstructions']);
$statement->bindValue(':shippingValue',$\u会话['shippingValue']);
$statement->bindValue(':paymentType',$\会话['paymentType']);
$statement->bindValue(':paymentRef',$\会话['paymentRef']);
$statement->bindValue(':sellingPrice',$\会话['sellingPrice']);
$statement->bindValue(':newQtyOnHand',$会话['newQtyOnHand']);
//执行该语句
$success=$statement->execute();
}//结束尝试
捕获(PDO$e){
echo“添加订单时出错:”。$e->getMessage();
退出();
}//端盖
//测试结果并获取刚刚创建的订单编号或显示适当的消息
如果($成功){
echo$sql='SELECT orderNbr FROM orders BY orderNbr';
foreach($conn->query($sql)作为$row){
打印$row['orderNbr']。“\t”;
}
}
否则{
模具(“无法检索订单编号”

”; } //读取购物车并插入orderedItem记录,并更新产品记录中的现有库存 foreach($\会话['cart']作为$prodNbr=>$value){ //在变量中存储所需的详细信息 $qtyOrdered=$\会话['cart'][$prodNbr]['qtyOrdered']; $qtyOnHand=$\会话['cart'][$prodNbr]['qtyOnHand']; $sellingPrice=$\会话['cart'][$prodNbr]['price']; 试一试{ //CREATEORDEDITEM表sql insert语句 $sql=“插入到orderedItem集合orderNbr=:custNbr,prodNbr=:prodNbr,qtyOrdered=:qtyOrdered,sellingPrice=:sellingPrice;”; }//结束尝试 捕获(PDO$e){ echo“添加orderedItem时出错:”。$e->getMessage(); 退出(); }//端盖 //测试结果并显示相应的消息 如果(!$success){ die(“无法执行orderedItem表插入”

”; } //为产品记录创建新的现存量值 $newQtyOnHand=$qtyOnHand-$qtyOrdered; 试一试{ //创建产品表sql update语句 $sql=“更新产品集prodNbr=:prodNbr,prodName=:prodName,price=:price,qtyOnHand=:qtyOnHand,description=:description,photo=:photo,thumbNail=:thumbNail,suppCode=:suppCode;”; }//结束尝试 捕获(PDO$e){ 回显“更新产品qtyOnHand:”时出错。$e->getMessage(); 退出(); }//端盖 //测试结果并显示相应的消息 如果(!$success){ 模具(“无法执行产品表更新”

”; } }//foreach的结尾 }//函数结束
您首先有一个错误的占位符令牌:
orderNbr=:orderNbr
需要是
orderNbr=:orderNbr
;注意whitspace。其次,即使这是正确的,我也看不到您在任何地方绑定
:orderNbr

我认为订单号应该是一个自动递增整数字段,如果是这种情况,则不应将其包含在插入中。

此处:

$statement->bindValue(':dispatchDate', $_SESSION['dispatchDate']);
$statement->bindValue(':deliveryDate', $_SESSION['deliveryDate']);
$statement->bindValue(':sellingPrice', $_SESSION['sellingPrice']);
$statement->bindValue(':newQtyOnHand', $_SESSION['newQtyOnHand']);
查询中不存在这些绑定

此外,

orderNbr=: orderNbr 
应该是

orderNbr = :orderNbr
请注意,您也没有绑定它。 此外,查询中有两个以下参数:

deliveryState = :state
deliveryState = :deliveryState
deliveryPostCode = :deliveryPostCode
deliveryPostCode = :deliveryPostCode

你们真是太棒了,我今天要做这件事,我会告诉你们我的进展。你帮了一百万!第一步:阅读错误消息并理解它试图告诉您的内容。