当前位置: 首页 > 知识库问答 >
问题:

在准备好的语句中变量数与参数数不匹配

齐雅畅
2023-03-14
public function insert_new_listing($listing_assoc_array) {
    global $public_connection;
    $date = (string) date("Y-m-d");
    $hit_count = 0;
    if ($stmt = new mysqli_stmt($public_connection, 'INSERT INTO laptops (brand_name, title, description, price, discount, last_change_date, hit_count) VALUES (?,?,?,?,?,?,?)')) {
        /* bind parameters for markers */
        $stmt->bind_param(
                "sssdisi", 
                $listing_assoc_array['brand_name'], 
                $listing_assoc_array['title'], 
                $listing_assoc_array['description'], 
                $listing_assoc_array['price'], 
                $listing_assoc_array['discount'], 
                $date,
                $hit_count
        );

        /* execute query */
        $stmt->execute();

我在prepare语句和bind_param中有正确的数字(7),所以我不知道为什么会发生这种情况。

共有1个答案

陈坚
2023-03-14

正如我在上面的注释中提到的,new mysqli_stmt()不太可能返回falsey值。相反,您应该使用mysqli::prepare方法,例如...

public function insert_new_listing(mysqli $conn, array $listing) {
    $stmt = $conn->prepare('INSERT INTO laptops (brand_name, title, description, price, discount, last_change_date, hit_count) VALUES (?,?,?,?,?,NOW(),0)');
    if (!$stmt) {
        throw new Exception($conn->error, $conn->errno);
    }
    /* bind parameters for markers */
    $stmt->bind_param('sssdi', 
        $listing['brand_name'], 
        $listing['title'], 
        $listing['description'], 
        $listing['price'], 
        $listing['discount']);

    /* execute query */
    if (!$stmt->execute()) {
        throw new Exception($stmt->error, $stmt->errno);
    }

您可能会注意到,我使用了文本0now()而不是绑定$hit_count$date。找不到绑定已知静态值的任何理由。

我还将mysqli实例作为方法依赖项传入,而不是依赖于全局值。

 类似资料: