SQL语句在phpmyadmin中有效,但在使用mysqli时它没有

时间:2014-09-26 09:34:27

标签: php mysql sql mysqli phpmyadmin

肯定我错过了一些东西。 如果粘贴在phpmyadmin中,下面使用的SQL代码可以正常工作。 但是一旦我在自定义PHP代码中使用它,就会引发异常:

  

您的SQL语法有错误;检查手册   对应于您的MySQL服务器版本,以便使用正确的语法   'CREATE TABLE v2_session(username varchar(150)DEFAULT''附近,时间   varchar(第2行1'

我错过了什么,代码很简单,我现在很困惑。 这是我的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);

2 个答案:

答案 0 :(得分:2)

mysqli_query不允许以分号连接的多个语句。

将查询拆分为两个单独的查询,或者使用语法非常相似的mysqli_multi_query()

  

bool mysqli_multi_query(mysqli $ link,string $ query)

     

执行一个或多个以分号连接的查询。

mysqli_multi_query的缺点是它使您的代码对SQL注入更敏感(因为可以注入整个语句),但对于没有参数的静态查询,它不应该导致任何问题。

答案 1 :(得分: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);
}