PHP代码中的SQL语法错误,即使命令在命令行中运行

时间:2015-11-14 12:45:43

标签: php mysql

我正在尝试在XAMPP中创建一些SQL命令。我的查询返回以下错误:

  

您的SQL语法有错误;检查手册   对应于您的MariaDB服务器版本,以获得正确的语法   靠近'CREATE TABLE IF NOT EXISTS kayttajat(id INT(10)NOT NULL   AUTO_INCREMENT,在第2行进行调整

我找不到语法错误。 当我在命令行中通过复制粘贴运行完全相同的命令时,它可以正常工作。所以我需要在PHP代码中使用一些不同的语法吗? 此外,如果我删除第一个命令,则错误消息将移至[...] right syntax to use near 'CREATE TABLE IF NOT EXISTS rivit [...]。如果我删除第二个命令,则错误来自第三个命令,依此类推。我真的不明白错误在哪里。

$query='
CREATE DATABASE IF NOT EXISTS asdgfhj;
CREATE TABLE IF NOT EXISTS kayttajat
(
    id INT(10) NOT NULL AUTO_INCREMENT,
    tunnus1 varchar(32) NOT NULL,
    tunnus2 varchar(32) NOT NULL,
    nimi varchar(32),
    nimi2 varchar(32),
    oikeus INT(10) NOT NULL DEFAULT 1,
    PRIMARY KEY (id)
);
CREATE TABLE IF NOT EXISTS rivit
(
    id INT(10) NOT NULL AUTO_INCREMENT,
    sivu INT(10) NOT NULL,
    kayttaja INT(10) NOT NULL,
    sana varchar(500),
    kommentti varchar(1000),
    aika TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    muutos TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
    PRIMARY KEY(id)
);
CREATE TABLE IF NOT EXISTS sivut
(
    id INT(10) NOT NULL AUTO_INCREMENT,
    nimi varchar(32) NOT NULL,
    ohje varchar(2000) NOT NULL,
    salaisuus INT(10) NOT NULL DEFAULT 1,
    PRIMARY KEY(id)
);
';

$mysqli->query($query) or die($mysqli->error);

2 个答案:

答案 0 :(得分:0)

query()方法旨在执行单个查询而非多个查询。

您正在寻找的是multi_query()来执行以分号分隔的多个查询。

$query  = "SELECT CURRENT_USER();";
$query .= "SELECT Name FROM City ORDER BY ID LIMIT 20, 5";

/* execute multi query */
if ($mysqli->multi_query($query)) {
    ...
}

答案 1 :(得分:0)

如果要使用一个命令执行许多查询,则应使用multi_query

此外,您不会选择用于insert语句的数据库。 您应为所有表添加asdgfhj前缀,或在create table语句后使用USE asdgfhj

带前缀的示例:

<?php
$query='
CREATE DATABASE IF NOT EXISTS asdgfhj;
CREATE TABLE IF NOT EXISTS asdgfhj.kayttajat
(
    id INT(10) NOT NULL AUTO_INCREMENT,
    tunnus1 varchar(32) NOT NULL,
    tunnus2 varchar(32) NOT NULL,
    nimi varchar(32),
    nimi2 varchar(32),
    oikeus INT(10) NOT NULL DEFAULT 1,
    PRIMARY KEY (id)
);
';

$mysqli->multi_query($query) or die($mysqli->error);

use语句的示例:

<?php
$query='
CREATE DATABASE IF NOT EXISTS asdgfhj;
USE asdgfhj;
CREATE TABLE IF NOT EXISTS kayttajat
(
    id INT(10) NOT NULL AUTO_INCREMENT,
    tunnus1 varchar(32) NOT NULL,
    tunnus2 varchar(32) NOT NULL,
    nimi varchar(32),
    nimi2 varchar(32),
    oikeus INT(10) NOT NULL DEFAULT 1,
    PRIMARY KEY (id)
);
';

$mysqli->multi_query($query) or die($mysqli->error);