Помоги пожалуйста :). Я получаю эту ошибку:
Warning: mysqli::prepare() [mysqli.prepare]: (42000/1064): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '?(id INT NOT NULL AUTO_INCREMENT, PRIMARY KEY(id))' at line 1 in ***/classes/db.mysql.class.php on line 69 Warning: mysqli::prepare() [mysqli.prepare]: (42000/1064): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '?)' at line 1 in ***/classes/db.mysql.class.php on line 75
на этот вызов php-кода:
public function createTable($tableName) { $this->connect(); if ($stmt = $this->dbSocket->prepare("CREATE TABLE ?(id INT NOT NULL AUTO_INCREMENT, PRIMARY KEY(id))")) { $stmt->bind_param("s", $tableName); $stmt->execute(); $stmt->close(); } if ($stmt = $this->dbSocket->prepare("INSERT INTO sys_userTables(userTableName) VALUES (u_?)")) { $stmt->bind_param("s", $tableName); $stmt->execute(); $stmt->close(); } $this->disonnect(); }
$ tableName является строкой и передается правильно.
Метод connect ():
private function connect() { $this->dbSocket = new mysqli($this->dbHost, $this->dbUser, $this->dbPassword, $this->dbDatabase); if (mysqli_connect_errno()) { printf("Brak połączenia z serwerem MySQL. Kod błędu: %s\n", mysqli_connect_error()); exit(); } }
ТИА.
Вы не можете использовать имя таблицы в качестве параметра.
Если точкой этого является создание нескольких таблиц с одинаковой структурой, но с другим именем, я предлагаю использовать что-то вроде:
$table_names = array('a', 'b', 'c'); foreach($table_names as $name) { $query = "CREATE TABLE `$name` (id INT NOT NULL AUTO_INCREMENT, PRIMARY KEY(id))"; // run query or add it to a collection to run later // or append a ';' to the end of the string and do it with a multi_query }