Có hai vấn đề lớn ở đây. Đầu tiên là trẻ vị thành niên. Những dòng mã này sẽ không bao giờ hoạt động:
$db->bindParam(1,`account`);
$db->bindParam(1,'$dbb'); //line 17
Điều này là do cả hai người trong số họ đang cố gắng gọi bindParam
dưới dạng chuỗi . Điều này là không thể. bindParam
cần một tham chiếu đến một biến. Đây là lý do tại sao bạn gặp lỗi "không thể chuyển tham số 2 bằng tham chiếu":bạn chỉ có thể chuyển biến bằng cách tham khảo.
Tuy nhiên, cả hai đều hoạt động:
$db->bindParam(1, $dbb); // call bindParam on a variable
$db->bindValue(1, 'account'); // call bindValue on a string literal
Tuy nhiên, vấn đề cơ bản hơn là sự hiểu biết của bạn về các tuyên bố đã chuẩn bị. Ý tưởng của các tuyên bố chuẩn bị là không thay thế đơn giản các chuỗi thành một chuỗi khác. Về cơ bản, nó là về việc tách cấu trúc của truy vấn khỏi dữ liệu. Tên của bảng được coi là một phần của cấu trúc của truy vấn, không phải là một phần của dữ liệu. Bạn cần đặt tên bảng trong truy vấn ban đầu. Mã đầu tiên của bạn là cách để làm điều đó.
$db = $conn->prepare( 'CREATE SCHEMA IF NOT EXISTS account');