【问题标题】:Invalid parameter number: parameter was not defined error [duplicate]参数号无效:参数未定义错误[重复]
【发布时间】:2016-06-14 13:34:46
【问题描述】:

我正在尝试创建一个插入表单,用户可以在其中将新产品(甜蜜)的详细信息插入 MYSQL 数据库。

产品图片插入到指定目录item_images/$product_image

但是,该项目未插入数据库并产生以下错误:

Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[HY093]: 
Invalid parameter number: parameter was not defined' in /home/k1335948/www/loginregister-master/insert_product.php:168 
Stack trace: #0 /home/k1335948/www/loginregister-master/insert_product.php(168): PDOStatement->execute(Array) #1 {main} 
thrown in /home/k1335948/www/loginregister-master/insert_product.php on line 168

数据库连接很好,因为我的其他语句适用于其他元素。

我在 PDO 方面没有太多经验,我一直在这里和在线寻找解决方案。

if(isset($_POST['insert_post'])) {

    $product_title = $_POST['title'];
    $product_cat = $_POST['item_cat'];
    $product_brand = $_POST['item_brand'];
    $product_price = $_POST['price'];
    $product_desc = $_POST['description'];
    $product_keywords = $_POST['keyword'];

    // retrieving image 
    $product_image  = $_FILES['product_image']['name'];
    $product_image_tmp  = $_FILES['product_image']['tmp_name'];

    move_uploaded_file($product_image_tmp,"item_images/$product_image");

    $insert_product = "INSERT INTO items(photo, title, description, keyword, price, item_category, item_brand) VALUES (:product_image, :product_title, :product_desc, :product_keywords, :product_price, :product_cat, :product_brand)";

    $insert_pro = $db->prepare($insert_product); 
    $results = $insert_pro->execute(array(
    ":product_image" => $product_image,
    ":title" => $product_title,
    ":product_desc" => $product_desc,
    ":product_keywords" => $product_keywords,
    ":product_price" => $product_price,
    ":product_cat" => $product_cat,
    ":product_brand" => $product_brand));

    if($insert_pro){

    echo "<script>alert('Product has been added sucessfully')</script>";
    echo "<script>window.open('insert_product.php','_self')</script>";
    }
}

(已编辑)这是我的表格:

    <form action ="insert_product.php" name="insert_form" method="post" enctype = "multipart/form-data">

    <table align="center" width="100%" border="2" bgcolor="pink">

    <tr>
        <td align="right"><b>Product Title: </b></td>
        <td>
        <input type="text" name="product_title" /></td>
    </tr>

    <tr>
        <td align="right"><b>Product Category: </b></td>
        <td>
        <select name="product_cat" />
        <option>Select Category: <option>

        <?php getCat(); ?>

        </select>
        </td>
    </tr>

    <tr>
        <td align="right"><b>Product Brand: </b></td>
        <td>
        <select name="product_brand" />
        <option>Choose Brand: <option>

        <?php getBrand(); ?>

        </select>
        </td>
    </tr>

    <tr>
        <td align="right"><b>Product Image: </b></td>
        <td>
        <input type="file" name="product_image" /></td>
    </tr>

    <tr>
        <td align="right"><b>Product Price: </b></td>
        <td>
        <input type="text" name="product_price" /></td>
    </tr>

    <tr>
        <td align="right"><b>Product Description: </b></td>
        <td>
        <textarea name="product_desc" cols="20" rows="10"></textarea></td>
    </tr>

    <tr>
        <td align="right"><b>Product Keywords: </b></td>
        <td>
        <input type="text" name="product_keywords" /></td>
    </tr>

    <tr align="center">
        <td colspan="8"><input type="submit" name="insert_post" value="Insert New Product" /></td>
    </tr>

    </form>

【问题讨论】:

    标签: php mysql pdo


    【解决方案1】:

    错误在于准备 SQL 或至少在 execute 函数上。您不会将所有请求的值绑定到 SQL 字符串中定义的参数。

    特别是 SQL 中的 :product_title 和您的执行中的 :title method

    $insert_pro->execute(array(
      ":product_image" => $product_image,
      ":product_title" => $product_title,
      ":product_desc" => $product_desc,
      ":product_keywords" => $product_keywords,
      ":product_price" => $product_price,
      ":product_cat" => $product_cat,
      ":product_brand" => $product_brand
    ));
    

    它应该是:

    if($results){
      // product has been successfully added.
    }
    

    【讨论】:

    • 我已经对指定的代码进行了更改,但是我现在收到这个新错误:解析错误:语法错误,意外'[',期待')'
    • 也许您使用的是旧版本的 PHP。将[arraydata] 更改为array(arraydata)
    • 这是我正在使用的版本:当前 PHP 版本:5.2.5。我也进行了更改,但错误仍然存​​在。
    • 您唯一需要做的就是将:title 更改为:product_title,但我现在也为您更新了我的代码。
    • 您的新建议代码已删除“解析错误”,但是有一个类似于第一个错误的新错误:致命错误:未捕获的异常 'PDOException' 带有消息 'SQLSTATE[23000]:完整性约束违规:1048 列“标题”不能为空“在 /home/k1335948/www/loginregister-master/insert_product.php:169 堆栈跟踪:#0 /home/k1335948/www/loginregister-master/insert_product.php(169) : PDOStatement->execute(Array) #1 {main} 在第 169 行的 /home/k1335948/www/loginregister-master/insert_product.php 中抛出
    【解决方案2】:

    我的表单名称与我的数据库表 -items- 中的名称不匹配。我需要做的就是调整名称以匹配 -items- 表中的名称。疯狂的错误,但简单的解决方案。 :) 无论如何感谢@Xorifelse 的帮助。

    【讨论】:

    • 这个我真的不明白,html表单名不匹配数据库中的列名?这两种语言甚至不相互交流。正确的问题是 $_POST['title'] 为空,因为您的 HTML 表单输入使用不同的名称 name="product_title" 所以 $_POST['product_title'] 将是解决方案。
    猜你喜欢
    • 2017-12-12
    • 1970-01-01
    • 2022-08-05
    • 2017-06-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-13
    • 2018-06-15
    相关资源
    最近更新 更多