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


SQL syntax error in PHP code, even though command runs in command line

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

您的SQL语法有错误;查看手册与您的MariaDB服务器版本相对应,以便使用正确的语法接近"如果不存在则创建表"kaytajat(id INT(10)NOT NULLAUTO_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);

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)) {
    ...
}

如果您想用一个命令执行多个查询,则应该使用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);