2

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 address ( Id int(11) NOT NULL AUTO_INCREMENT, EntityId int(11) ' の近くで使用する正しい構文について確認してください。テーブル アドレス ( 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) );

私は何を間違っていますか???

4

2 に答える 2

2

問題はCREATE TABLEステートメントではなくmysql_query()、1 回の呼び出しで複数のステートメントを実行することをサポートしていません。最初に別の呼び出しで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.
于 2012-10-01T10:57:19.457 に答える
0

正しい方向に私を指摘してくれたミハイに感謝します...この場合、正しい方法は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;

}
于 2012-10-01T13:44:15.647 に答える