提问人:Codestrip 提问时间:3/30/2023 最后编辑:Codestrip 更新时间:4/2/2023 访问量:144
SQL 语法错误(未捕获的 MySQLi sql 异常)。尝试了其他答案,但无济于事
Error in SQL Syntax (Uncaught MySQLi sql exception). Tried other answers to no avail
问:
我有一个PHP文件,我基本上是将一个SQL文件读入一个数组中,并设置一个与该变量相等的变量,然后用我的变量替换单词,然后执行SQL。但随后我收到一个似乎非常模糊的错误。<DB_PREFIX>
$db_prefix
错误消息如下:
致命错误:未捕获mysqli_sql_exception:您的 SQL 语法有错误;检查与您的 MariaDB 服务器版本相对应的手册,了解在 C:\xampp\htdocs\Project\install\file.inc.php:74 的第 74 行的“DROP TABLE IF EXISTS chbep_accounts”附近使用的正确语法
这是我的file.inc.php第74行:
$sql_dump = file($sql_dump_file, FILE_IGNORE_NEW_LINES);
$database_prefix = "chbep_";
$sql_dump = str_ireplace('<DB_PREFIX>', $database_prefix, $sql_dump);
foreach($sql_dump as $sql_line){
$tsl = trim($sql_line);
if(($sql_line != '') && (substr($tsl, 0, 2) != '--') && (substr($tsl, 0, 1) != '?') && (substr($tsl, 0, 1) != '#')) {
$query .= $sql_line;
if(preg_match('/;\s*$/', $sql_line)){
if((strlen(trim($query)) > 5) && !@mysqli_query($link, $query)){
$error_mg[] = mysqli_error($link);
return false;
}
$query = '';
}
}
}
该变量是我的自定义 SQL 文件,它使用函数读入数组中,并且变量设置为等于该变量,然后我将<DB_PREFIX>替换为我自己的变量,在本例中为“chbep_”。这是我的自定义SQL文件和我在上面的错误中看到的行:$sql_dump
file()
$db_prefix
DROP TABLE IF EXISTS `<DB_PREFIX>accounts`;
其他 SQL 行:
CREATE TABLE IF NOT EXISTS `<DB_PREFIX>accounts` (
`id` smallint(6) NOT NULL AUTO_INCREMENT,
`first_name` varchar(32) COLLATE utf8_unicode_ci NOT NULL DEFAULT '',
`last_name` varchar(32) COLLATE utf8_unicode_ci NOT NULL DEFAULT '',
`user_name` varchar(32) COLLATE utf8_unicode_ci NOT NULL DEFAULT '',
`password` varchar(50) CHARACTER SET latin1 NOT NULL DEFAULT '',
`email` varchar(100) CHARACTER SET latin1 NOT NULL,
`profile_photo` varchar(50) COLLATE utf8_unicode_ci NOT NULL DEFAULT '',
`profile_photo_thumb` varchar(60) COLLATE utf8_unicode_ci NOT NULL DEFAULT '',
`account_type` enum('owner','mainadmin','admin','hotelowner','agencyowner','regionalmanager','hotelmanager') CHARACTER SET latin1 NOT NULL DEFAULT 'mainadmin',
`companies` varchar(1024) COLLATE utf8_unicode_ci NOT NULL DEFAULT '',
`preferred_language` varchar(2) CHARACTER SET latin1 NOT NULL,
`oa_consumer_domain` varchar(150) COLLATE utf8_unicode_ci NOT NULL DEFAULT '',
`oa_consumer_key` varchar(20) COLLATE utf8_unicode_ci NOT NULL DEFAULT '',
`oa_consumer_secret` varchar(70) COLLATE utf8_unicode_ci NOT NULL DEFAULT '',
`oa_date_created` datetime NULL DEFAULT NULL,
`date_created` datetime NULL DEFAULT NULL,
`date_lastlogin` datetime NULL DEFAULT NULL,
`registration_code` varchar(20) CHARACTER SET latin1 NULL DEFAULT '',
`registration_type` varchar(20) CHARACTER SET latin1 NULL DEFAULT '',
`is_active` tinyint(1) NOT NULL DEFAULT '1',
`room_relocation` tinyint(1) NOT NULL DEFAULT '1',
`hotel_relocation` tinyint(1) NOT NULL DEFAULT '1',
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=2 ;
答: 暂无答案
评论
var_dump($query);