2014-09-26 120 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); 
} 
相关问题