我看到数组定义中的解析错误是类的私有静态成员。
有问题的代码是:
// %1$s for table name
// %2$s for character set collate
// Version 1 is the initial DB layout
private static $version_sql = array(
1 => "CREATE TABLE %1$s (
id int(11) NOT NULL AUTO_INCREMENT,
chance_id int(11) UNSIGNED,
user_fingerprint varchar(32),
state tinyint UNSIGNED NOT NULL DEFAULT 0,
expires int(11) UNSIGNED,
email varchar(255),
PRIMARY KEY id (id)
UNIQUE KEY chance_user (chance_id,user_fingerprint)
) %2$s;"
);
引发的解析错误是Parse error: syntax error, unexpected '"'
,并且给出的行号是SQL定义的第一行(包含CREATE TABLE
的行)。
我读过Parse Error: Unexpected double quotes in array这是一个类似的错误,但似乎更多的是在引用变量不可用的上下文中使用字符串插值,这不是我正在做的事情这里。
知道我在这里失踪的是什么吗?
答案 0 :(得分:2)
您需要转义$
个字符,因为您的字符串包含双引号中的$s
。 PHP尝试填写该变量的内容(static
上下文中不允许)。
将$
替换为\$
或使用单引号作为整个字符串。
// %1$s for table name
// %2$s for character set collate
// Version 1 is the initial DB layout
private static $version_sql = array(
1 => 'CREATE TABLE %1$s (
id int(11) NOT NULL AUTO_INCREMENT,
chance_id int(11) UNSIGNED,
user_fingerprint varchar(32),
state tinyint UNSIGNED NOT NULL DEFAULT 0,
expires int(11) UNSIGNED,
email varchar(255),
PRIMARY KEY id (id)
UNIQUE KEY chance_user (chance_id,user_fingerprint)
) %2$s;'
);