Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/performance/5.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 PDO使用外键创建表_Php_Mysql Error 1064 - Fatal编程技术网

Php PDO使用外键创建表

Php PDO使用外键创建表,php,mysql-error-1064,Php,Mysql Error 1064,我很难用带有外键元素的MySQL(PDO)创建一个表,如果没有外键,表会创建得很好,但是如果没有外键,我会收到以下消息: SQLSTATE[42000]:语法错误或访问冲突:1064您的SQL语法有错误 我曾尝试寻找解决方案并修改代码,但似乎一直遇到这种情况。是有办法还是我是一个沃利 <?php $servername = "localhost"; $username = "root"; $password = NULL; $dbname = "testapplciants"; try

我很难用带有外键元素的MySQL(PDO)创建一个表,如果没有外键,表会创建得很好,但是如果没有外键,我会收到以下消息:

SQLSTATE[42000]:语法错误或访问冲突:1064您的SQL语法有错误

我曾尝试寻找解决方案并修改代码,但似乎一直遇到这种情况。是有办法还是我是一个沃利

<?php
$servername = "localhost";
$username = "root";
$password = NULL;
$dbname = "testapplciants";

try {
    $conn = new PDO("mysql:host=$servername;dbname=$dbname", $username, $password);
    // set the PDO error mode to exception
    $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);


    //sql to create the activity registered table
    $sql = "CREATE TABLE Activity_Register (
    Activity_id INT(6) UNSIGNED AUTO_INCREMENT PRIMARY KEY,
    participant_id INT(6) FOREIGN KEY (participant_id) REFERENCES participants,
    entry_number INT(2),
    recorded_result INT(6),
    entry_date TIMESTAMP

    )";

    // use exec() because no results are returned
    $conn->exec($sql);
    echo "Table Activity Recorder created successfully";
    }
catch(PDOException $e)
    {
    echo $sql . "<br>" . $e->getMessage();
    }

$conn = null;
?> 

列定义中的主键
是单独定义的缩写,该定义为
主键(`column\u name`)

外键
没有这样的速记

`participant_id` INT(6),
FOREIGN KEY (`participant_id`) REFERENCES `participants` (`id???`)

请注意,您忽略了引用表的列名,并且您可能还应该在DELETE上使用
参数,在UPDATE
上使用
参数。

我可以问一下,您为什么尝试使用PHP代码创建表?在您的项目中访问它之前,使用数据库查看器创建它不是更实际吗?@silkfire虽然我同意您在这种情况下的看法,但如果处理可能涉及
创建临时表
;)的更复杂的应用程序,了解这些事情可能会很有用@NiettheDarkAbsol绝对是这样,对于临时表来说,这绝对是有意义的,但是对于可重用表——从开发人员的角度来看——我发现在GUI中设计和构造表要容易得多:)@silkfire Heh,我有一个控制台,我只是直接在其中键入SQL——似乎找不到一个可以实现我想要的一切的GUI。Adminer相当不错,但似乎只是半心半意地做外键-我必须创建表,然后编辑键以获得我想要的参数。。。啊,好吧,谢谢你,黑暗的绝对,我试过了,现在发现了另一个错误。我是一个新手开发人员,所以要有耐心:-)这次的错误是:SQLSTATE[HY000]:一般错误:1215无法添加外键constraintHi,可能这不是问题所在,但仍然提到,您要添加为外键的列必须被索引。