Tôi đã một chức năng mà tạo ra một tuyên bố INSERT chuẩn bị dựa trên một mảng kết hợp các tên cột và các giá trị được chèn vào cột và một tên bảng (một chuỗi đơn giản):Tuyên bố chuẩn bị Mysqli - Trả về False, nhưng tại sao?
function insert ($param, $table) {
$sqlString = "INSERT INTO $table (".implode(', ',array_keys($param)).') VALUES ('.str_repeat('?, ', (count($param) - 1)).'?)';
if ($statement = $this->conn->prepare($sqlString)):
$parameters = array_merge(array($this->bindParams($param), $param));
call_user_func_array(array($statement, 'bind_param', $parameters));
if (!$statement->execute()):
die('Error! '.$statement->error());
endif;
$statement->close();
return true;
else:
die("Could Not Run Statement");
endif;
}
Vấn đề của tôi là $ mà này-> conn-> chuẩn bị (nó là một phần của một lớp học, conn là một đối tượng mysqli MỚI, mà làm việc với không có vấn đề) trả về false, nhưng không cho tôi một lý do tại sao!
Đây là một mẫu $ sqlString đó được xây dựng cho chuẩn bị tuyên bố:
INSERT INTO students (PhoneNumber, FirstName, MiddleInit, LastName, Email, Password, SignupType, Active, SignupDate) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)
bất cứ ai có thể thấy một vấn đề với tuyên bố tham số này? Bất kỳ lý do nào mà hàm chuẩn bị sẽ trả về false?
Bạn có nhận được thông báo lỗi không (xem http://php.net/manual/en/mysqli.error.php khi chuẩn bị trả về false?); nếu có, nó là cái gì ? –
Bạn đã thử chạy câu lệnh INSERT thực sự trong cơ sở dữ liệu của mình, để thấy rằng bạn có đúng SQL không? – DOK
Tôi vừa bật mysqli_report (MYSQLI_REPORT_ALL) để hiểu rõ hơn về những gì đang diễn ra - một trong những tên trường của tôi không chính xác - bạn nghĩ rằng chuẩn bị() sẽ ném một ngoại lệ, nhưng nó không thành công. –