我正在通过PHP脚本运行以下查询
DROP TABLE IF EXISTS `address`;CREATE TABLE `address` ( `Id`
int(11) NOT NULL auto_increment, `EntityId` int(11) NOT NULL,
`sStreet1` varchar(50), `sStreet2` varchar(50), `sCity`
varchar(50), `sLoc` varchar(50), `sPv` char(2), `sState`
varchar(50), `sZip` varchar(10), `sType` varchar(50),
`FiscalAddress` tinyint(1) NOT NULL, PRIMARY KEY (`Id`) );
我可以通过不同的客户端(例如Navicat)运行此查询而不会出现问题,但通过PHP运行此命令将输出以下内容
$result = mysql_query($query);
if (!$result) {
$message = 'Invalid import content: ' . mysql_error() . "\n\n";
$message .= 'Whole query: ' . $query;
die($message);
}
这将输出以下内容:
您的SQL语法有错误;检查与MySQL服务器版本对应的手册,以便在第2行的'CREATE TABLE地址(Id int(11)NOT NULL AUTO_INCREMENT,EntityId int(11)'附近使用正确的语法。整个查询:DROP TABLE IF EXISTS地址; CREATE TABLE地址(Id int(11)NOT NULL AUTO_INCREMENT,EntityId int(11)NOT NULL,sStreet1 varchar(50),sStreet2 varchar(50),sCity varchar(50),sLoc varchar(50),sPv char(2), sState varchar(50),sZip varchar(10),sType varchar(50),FiscalAddress tinyint(1)NOT NULL,PRIMARY KEY(Id));
我做错了什么???
答案 0 :(得分:2)
问题不是CREATE TABLE
语句,而是mysql_query()
不支持在一次调用中执行多个语句。首先在单独的DROP TABLE
调用中执行mysql_query()
语句,然后执行CREATE TABLE
。
$dt = mysql_query("DROP TABLE IF EXISTS `address`");
if ($dt) {
// Execute CREATE TABLE separately...
$ct = mysql_query("CREATE TABLE...........");
if (!$ct) {
// Proceed with the rest of your code.
$message = 'Invalid import content: ' . mysql_error() . "\n\n";
$message .= 'Whole query: ' . $query;
die($message);
}
}
else {} // DROP TABLE call failed. Handle appropriately.
答案 1 :(得分:0)
感谢Mihai 你指出了我正确的方向...... 在这种情况下,正确的方法是msqli
这是完整的工作代码:
function runImportQuery($query = '') {
$mysqli = new mysqli($this->DATABASE_HOST,$this->DATABASE_USER,$this->DATABASE_PASS,$this->DATABASE_DB );
if ($mysqli->connect_errno) {
$message = "Connect failed: ". $mysqli->connect_error;
}else{
$result = $mysqli->multi_query($query);
// Check result
// This shows the actual query sent to MySQL, and the error. Useful for debugging.
if (!$result) {
$message = "Failed to run query: (" . $mysqli->errno . ") " . $mysqli->error ."\n\n\r";
$message .= 'Whole query: ' . $query."\n\n\r";
return $message;
}else{
$message = "Import successfully completed!";
}
}
mysqli_close($link);
return $message;
}