Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/unit-testing/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP代码中的SQL语法错误,即使命令在命令行中运行_Php_Mysql - Fatal编程技术网

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

PHP代码中的SQL语法错误,即使命令在命令行中运行,php,mysql,Php,Mysql,我正在尝试在XAMPP中生成一些SQL命令。我的查询返回以下错误: 您的SQL语法有错误;检查手册 对应于要使用的正确语法的MariaDB服务器版本 near“创建表如果不存在Kaytajat(id INT(10))不为空 自动增量,第2行的tunn' 我找不到语法错误。当我在命令行中通过复制粘贴运行完全相同的命令时,它可以工作。那么我需要在PHP代码中使用一些不同的语法吗? 另外,如果我删除第一个命令,错误消息将移动到[…]正确语法,以使用near'CREATE TABLE if NOT EX

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

您的SQL语法有错误;检查手册 对应于要使用的正确语法的MariaDB服务器版本 near“创建表如果不存在Kaytajat(id INT(10))不为空 自动增量,第2行的tunn'

我找不到语法错误。当我在命令行中通过复制粘贴运行完全相同的命令时,它可以工作。那么我需要在PHP代码中使用一些不同的语法吗? 另外,如果我删除第一个命令,错误消息将移动到
[…]正确语法,以使用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  = "SELECT CURRENT_USER();";
$query .= "SELECT Name FROM City ORDER BY ID LIMIT 20, 5";

/* execute multi query */
if ($mysqli->multi_query($query)) {
    ...
}
如果希望使用一个命令执行多个查询,则应使用

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

带有前缀的示例:

<?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);

也许换成?我不认为你能跑多个。谢谢!你太棒了!
<?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);