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)所以我不知道为什么会发生这种情况。
答案 0 :(得分:3)
正如我在上面的评论中所提到的,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);
}
您可能会注意到我使用了文字0
和NOW()
而不是绑定$hit_count
和$date
。看不出任何绑定已知静态值的理由。
我还将mysqli
实例作为方法依赖项传递,而不是依赖于全局变量。