2014-09-26 46 views
1

當然我缺少一些東西。 如果在phpmyadmin中粘貼,下面使用的SQL代碼工作得很好。 但是,一旦我在自定義PHP代碼中使用它,它會拋出一個異常:SQL語句在phpmyadmin中工作,但它不使用mysqli

您的SQL語法錯誤;檢查 對應於你的MySQL服務器版本正確的語法使用 附近在行 'CREATE TABLE v2_session(用戶名VARCHAR(150)DEFAULT '',時間 VARCHAR(1' 2

什麼時許手冊我丟失,代碼是死的簡單,我很迷茫,現在 這是我的PHP代碼:

$con=mysqli_connect("host","user","password","db"); 

if (mysqli_connect_errno()) { 
    echo "Error: " . mysqli_connect_error(); 
} 

    $sql=" 
    DROP TABLE IF EXISTS v2_session; 
    CREATE TABLE v2_session (
     username varchar(150) DEFAULT '', 
     time varchar(14) DEFAULT '', 
     session_id varchar(200) NOT NULL DEFAULT '0', 
     guest tinyint(4) DEFAULT '1', 
     userid int(11) DEFAULT '0', 
     usertype varchar(50) DEFAULT '', 
     gid tinyint(3) unsigned NOT NULL DEFAULT '0', 
     client_id tinyint(3) unsigned NOT NULL DEFAULT '0', 
     data longtext, 
     PRIMARY KEY (session_id(64)), 
     KEY whosonline (guest,usertype), 
     KEY userid (userid), 
     KEY time (time) 
    ) ENGINE=MyISAM DEFAULT CHARSET=utf8;"; 

if (mysqli_query($con,$sql)) { 
    echo 'Success!'; 
} else { 
    echo "Error: " . mysqli_error($con); 
} 

mysqli_close($con); 
+0

如果從上面刪除「DROP TABLE IF EXISTS v2_session;',該怎麼辦? – 2014-09-26 09:36:00

+0

你必須使用[*'Mysqli Multi Query' *](http://php.net/manual/en/mysqli.multi-query.php)進行多重聲明 – 2014-09-26 09:37:42

+0

是的,你們都在正確的軌道上。這樣一個愚蠢的問題,感謝您的快速幫助! – Gena 2014-09-26 09:45:39

回答

2

mysqli_query不允許多個語句連接分號。

將查詢拆分爲兩個單獨的查詢,或者使用mysqli_multi_query(),而使用非常類似的語法。

布爾mysqli_multi_query($ mysqli的鏈接,串$查詢)

執行它們由分號連接起來的一個或多個查詢。

mysqli_multi_query的缺點是,它使你的代碼SQL注入更加敏感(因爲整體語句可以注入),但不帶參數靜態查詢它不應該引起任何問題。

+1

就是這樣!該死的,現在感到很慚愧......非常感謝! – Gena 2014-09-26 09:44:48

1

這是兩個語句,應分別執行:

$sql = "DROP TABLE IF EXISTS v2_session"; 
if (!mysqli_query($con,$sql)) { 
    echo "Error: " . mysqli_error($con); 
    exit(1); 
} 

$sql=" 
CREATE TABLE v2_session (
    username varchar(150) DEFAULT '', 
    time varchar(14) DEFAULT '', 
    session_id varchar(200) NOT NULL DEFAULT '0', 
    guest tinyint(4) DEFAULT '1', 
    userid int(11) DEFAULT '0', 
    usertype varchar(50) DEFAULT '', 
    gid tinyint(3) unsigned NOT NULL DEFAULT '0', 
    client_id tinyint(3) unsigned NOT NULL DEFAULT '0', 
    data longtext, 
    PRIMARY KEY (session_id(64)), 
    KEY whosonline (guest,usertype), 
    KEY userid (userid), 
    KEY time (time) 
) ENGINE=MyISAM DEFAULT CHARSET=utf8"; 

if (mysqli_query($con,$sql)) { 
    echo 'Success!'; 
} else { 
    echo "Error: " . mysqli_error($con); 
} 
相關問題