используйте heredoc для ввода sql и при привязке var получите ошибку
Я пишу этот код для запроса
$tableQuery_comment = <<<query
CREATE TABLE IF NOT EXISTS `?comment` (
`cmt_id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
`cmt_obj_id` bigint(20) NOT NULL DEFAULT '0',
`cmt_author_name` tinytext NOT NULL,
`cmt_author_email` varchar(100) NOT NULL DEFAULT '',
`cmt_author_url` varchar(200) NOT NULL DEFAULT '',
`cmt_author_ip` varchar(100) NOT NULL DEFAULT '',
`cmt_date` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
`cmt_content` text NOT NULL,
`cmt_approve` varchar(20) NOT NULL DEFAULT 'yes',
`cmt_agent` varchar(255) NOT NULL DEFAULT '',
`cmt_parent` bigint(20) NOT NULL DEFAULT '0',
`user_id` bigint(20) NOT NULL DEFAULT '0',
PRIMARY KEY (`cmt_id`),
KEY `cmt_obj_id` (`cmt_obj_id`),
KEY `cmt_parent` (`cmt_parent`),
KEY `user_id` (`user_id`)
)
query;
И используйте mysqli для подключения и выполнения моего запроса с привязкой значения в первой строке моего запроса
$con = new mysqli($dbHost, $dbUser, $dbPass, $dbName);
$exe = $con->prepare($tableQuery_comment);
$exe->bind_param(1, $tablePrefix);
$exe->execute();
И получить ошибку в этой строке
$exe->bind_param(1, $tablePrefix);
Ошибка:
Mysqli_stmt::bind_param(): Количество переменных не совпадает с количеством параметров в подготовленном операторе
Я пытаюсь привязать :name
параметр, подобный этому коду
(когда использовать это изменение оператора? войдите в:tableprefix)
$exe->bind_param(':tablePrefix', $tablePrefix);
И это код
$exe->bind_param('s', $tablePrefix);
Но получаю и получаю снова ту же ошибку
Что я должен сделать, чтобы связать параметр в heredoc с mysqli?
2
1 answers
Вы не можете использовать параметры для имен таблиц и столбцов, только там, где разрешены выражения. Поэтому вы должны использовать подстановку строк для этого:
$tableQuery_comment = <<<query
CREATE TABLE IF NOT EXISTS `{$tablePrefix}comment` (
`cmt_id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
`cmt_obj_id` bigint(20) NOT NULL DEFAULT '0',
`cmt_author_name` tinytext NOT NULL,
`cmt_author_email` varchar(100) NOT NULL DEFAULT '',
`cmt_author_url` varchar(200) NOT NULL DEFAULT '',
`cmt_author_ip` varchar(100) NOT NULL DEFAULT '',
`cmt_date` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
`cmt_content` text NOT NULL,
`cmt_approve` varchar(20) NOT NULL DEFAULT 'yes',
`cmt_agent` varchar(255) NOT NULL DEFAULT '',
`cmt_parent` bigint(20) NOT NULL DEFAULT '0',
`user_id` bigint(20) NOT NULL DEFAULT '0',
PRIMARY KEY (`cmt_id`),
KEY `cmt_obj_id` (`cmt_obj_id`),
KEY `cmt_parent` (`cmt_parent`),
KEY `user_id` (`user_id`)
)
query;
2
Author: Barmar, 2014-01-27 21:13:34