Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/267.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/57.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和MySQL外键未按预期工作_Php_Mysql_Sql - Fatal编程技术网

PHP和MySQL外键未按预期工作

PHP和MySQL外键未按预期工作,php,mysql,sql,Php,Mysql,Sql,我只通过PHP使用命令进行了一些MySQL操作(没有使用phpMyAdmin接口创建表),并且在创建主键和外键时遇到了一些问题。这是我当前的代码 <?php $conectar = mysql_connect("localhost", "root", "") or die (mysql_error()); //mysql_query("CREATE DATABASE DataBaseTeste") or die(mysql_error()); mysql_select_db("DataBa

我只通过PHP使用命令进行了一些MySQL操作(没有使用phpMyAdmin接口创建表),并且在创建主键和外键时遇到了一些问题。这是我当前的代码

<?php
$conectar = mysql_connect("localhost", "root", "") or die (mysql_error());
//mysql_query("CREATE DATABASE DataBaseTeste") or die(mysql_error());
mysql_select_db("DataBaseTeste") or die(mysql_error());
mysql_query("CREATE TABLE Pergunta("
    . "id_Pergunta INT AUTO_INCREMENT,"
    . "Descricao TEXT,"
    . "Nivel VARCHAR,"
    . "PRIMARY KEY(id_Pergunta),"
    . "FOREIGN KEY(id_Assunto) REFERENCES Assunto(id_Assunto))")Or die(mysql_error());

mysql_query("CREATE TABLE Aluno("
    . "id_Aluno INT NOT NULL,"
    . "AlunoNome CHAR,"
    . "Grupo CHAR,"
    . "PRIMARY KEY(id_Aluno))")Or die(mysql_error());

mysql_query("CREATE TABLE Assunto("
    . "id_Assunto INT,"
    . "Descricao VARCHAR,"
    . "PRIMARY KEY(id_Assunto))")Or die(mysql_error());


mysql_close();

?>
我收到的错误消息如下:

“您的SQL语法有错误;请查看与您的MySQL服务器版本对应的手册,以了解使用“主键(id_Pergunta)…”附近的正确语法。”


这可能是很愚蠢的事情,但我想不出来。

首先,尝试使用小写名称,我只是为
PKs

然后要使用
外键
,您必须添加列名,以便保存
FK

另外,您需要使用
INNODB
,不记得
MyIsam
是否允许您使用FK,但我建议您使用它,请注意
INNODB
也会为它们创建索引

CREATE TABLE assunto(
    id_assunto INT,
    descricao VARCHAR(254),
    PRIMARY KEY(id_assunto)
)ENGINE=INNODB; 

CREATE TABLE aluno(
    id_aluno INT NOT NULL,
    alunoNome CHAR(254),
    grupo CHAR,
    PRIMARY KEY(id_aluno)
)ENGINE=INNODB;


CREATE TABLE pergunta(
    id_pergunta INT AUTO_INCREMENT,
    id_assunto int,
    descricao TEXT,
    nivel VARCHAR(254),
    PRIMARY KEY(id_pergunta),
    FOREIGN KEY(id_assunto) REFERENCES assunto(id_assunto)
)ENGINE=INNODB;
让我为您添加一个PHP版本,注意执行顺序

<?php
$conectar = mysql_connect("localhost", "root", "") or die (mysql_error());
//mysql_query("CREATE DATABASE DataBaseTeste") or die(mysql_error());
mysql_select_db("DataBaseTeste") or die(mysql_error());

mysql_query("CREATE TABLE aluno("
    . "id_aluno INT NOT NULL,"
    . "alunoNome CHAR,"
    . "grupo CHAR,"
    . "PRIMARY KEY(id_aluno))")Or die(mysql_error());

mysql_query("CREATE TABLE assunto("
    . "id_assunto INT,"
    . "descricao VARCHAR,"
    . "PRIMARY KEY(id_assunto))")Or die(mysql_error());

    mysql_query("CREATE TABLE Pergunta("
    . "id_pergunta INT AUTO_INCREMENT,"
    . "id_assunto INT AUTO_INCREMENT,"
    . "descricao TEXT,"
    . "Nivel VARCHAR,"
    . "PRIMARY KEY(id_pergunta),"
    . "FOREIGN KEY(id_assunto) REFERENCES assunto(id_assunto))")Or die(mysql_error());

mysql_close();

用mysqli\u*所有函数替换mysql\u*函数?因为我只是重新排序了所有内容,但它不起作用……我使用了您编写的代码,它创建了数据库和“Aluno”表,但其他所有内容都不起作用,现在我看到一个错误:您的SQL语法中有一个错误;查看与您的MySQL服务器版本对应的手册,了解在第1行“PRIMARY KEY(id_assunto))”附近使用的正确语法。我更新了我的脚本(不是php版本),其中有一些额外的字符(“;”),但我是从MySQL cli执行的,使用MySQL 5.5.32,从命令行尝试,这样会比转录到您的php更快,复制粘贴应该可以工作是的,我仍然找不到正在发生的事情,但是你帮助了很多,至少数据库已经创建并工作了,谢谢你的朋友。我添加了一个sqlfidle,这样你就可以玩它了Hanks alot,它在那里工作得很好,但是由于某些原因,php代码不理解主键和外键
<?php
$conectar = mysql_connect("localhost", "root", "") or die (mysql_error());
//mysql_query("CREATE DATABASE DataBaseTeste") or die(mysql_error());
mysql_select_db("DataBaseTeste") or die(mysql_error());

mysql_query("CREATE TABLE aluno("
    . "id_aluno INT NOT NULL,"
    . "alunoNome CHAR,"
    . "grupo CHAR,"
    . "PRIMARY KEY(id_aluno))")Or die(mysql_error());

mysql_query("CREATE TABLE assunto("
    . "id_assunto INT,"
    . "descricao VARCHAR,"
    . "PRIMARY KEY(id_assunto))")Or die(mysql_error());

    mysql_query("CREATE TABLE Pergunta("
    . "id_pergunta INT AUTO_INCREMENT,"
    . "id_assunto INT AUTO_INCREMENT,"
    . "descricao TEXT,"
    . "Nivel VARCHAR,"
    . "PRIMARY KEY(id_pergunta),"
    . "FOREIGN KEY(id_assunto) REFERENCES assunto(id_assunto))")Or die(mysql_error());

mysql_close();