使用heredoc输入sql,当绑定var时,得到错误

时间:2014-01-27 21:02:16

标签: php mysqli bind heredoc

我为查询编写此代码

    $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绑定?

1 个答案:

答案 0 :(得分:2)

只有在允许表达式的情况下,才能使用表名和列名的参数。所以你必须使用字符串替换:

    $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;