PHP和MySQL外键未按预期工作
我只通过PHP使用命令进行了一些MySQL操作(没有使用phpMyAdmin接口创建表),并且在创建主键和外键时遇到了一些问题。这是我当前的代码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
$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();