我在导入和导出时遇到SQL语法问题。
我收到消息说我有语法错误。
我在array_map
处理之前使用mysql_query
去除斜线(我知道我应该使用mysqli,但这是一次性使用脚本)。
这是我的代码。
CREATE TABLE `jos_jc_api_emailconnector` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`api_service_board` varchar(255) NOT NULL,
`api_email_address` varchar(255) NOT NULL,
`api_emailboard_quickreferral` tinyint(1) NOT NULL DEFAULT '0',
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8;
任何人都可以解释为什么这样的东西不会通过mysql_query运行?它可以通过phpMyAdmin正常运行。
更新:
备份查询:
function backup_tables($tables_pull, $sessionName) {
$db_backup_jc = new Database();
$db_backup_jc->connectDB_1();
$db_prefix_pull = $db_backup_jc->db_prefix_pull;
// Add Table Prefix of Database Tables
//cycle through
foreach($tables_pull as $table) {
$add_prefix = $db_prefix_pull.$table;
$result = mysql_query('SELECT * FROM '.$add_prefix);
$num_fields = mysql_num_fields($result);
$return.= 'DROP TABLE IF EXISTS '.$add_prefix.';';
$row2 = mysql_fetch_row(mysql_query('SHOW CREATE TABLE '.$add_prefix));
$return.= "\n\n".$row2[1].";\n\n";
for ($i = 0; $i < $num_fields; $i++)
{
while($row = mysql_fetch_row($result))
{
$return.= 'INSERT INTO '.$add_prefix.' VALUES(';
for($j=0; $j<$num_fields; $j++)
{
$row[$j] = addslashes($row[$j]);
$row[$j] = str_replace("\n","\\n",$row[$j]);
if (isset($row[$j])) { $return.= '"'.$row[$j].'"' ; } else { $return.= '""'; }
if ($j<($num_fields-1)) { $return.= ','; }
}
$return.= ");\n";
}
}
$return.="\n\n\n";
}
//save file
$handle = fopen('tmp/db-backup-'.$sessionName.'.sql','w+');
fwrite($handle,$return);
fclose($handle);
}
IMPORT QUERY:
function import_tables($filename_SQL) {
$db_get_prefix_1 = new Database();
$db_get_prefix_1->connectDB_1();
$db_prefix_1 = $db_get_prefix_1->db_prefix_pull;
$db_get_prefix_2 = new Database();
$db_get_prefix_2->connectDB_2();
$db_prefix_2 = $db_get_prefix_2->db_prefix_push;
// Temporary variable, used to store current query
$templine = '';
$import_jc_SQL = file($filename_SQL);
$import_jc_SQL = array_map('stripslashes', $import_jc_SQL);
$import_jc_SQL = str_replace($db_prefix_1, $db_prefix_2, $import_jc_SQL);
foreach ($import_jc_SQL as $line) {
if (substr($line, 0, 2) == '--' || $line == '')
continue;
// Add this line to the current segment
$templine .= $line;
// If it has a semicolon at the end, it's the end of the query
if (substr(trim($line), -1, 1) == ';')
{
// Perform the query
//mysql_query($templine, $conn_DB_2) or print('Error performing query' . mysql_error() . '<br />');
// Reset temp variable to empty
//$templine = '';
}
}
mysql_query($templine) or print('Error performing query <br />' . mysql_error() . '<br />');
echo mysql_error();
}
答案 0 :(得分:0)
您正在逃避函数中的引号。如果不能删除转义,只需先删除它们,因为它们不需要:
`api_emailboard_quickreferral` tinyint(1) NOT NULL DEFAULT 0,
答案 1 :(得分:0)
你正在错误消息中删除斜杠,你会在'\'0\',
周围看到'0'
额外的斜杠。你可以:
default 0
而不是default '0'
或我建议使用第一个,因为使用'0'
使其成为字符串,并且需要另一个内部类型转换才能使其返回int。