【问题标题】:PDO creating a table with a foreign keyPDO 使用外键创建表
【发布时间】:2015-02-02 09:10:40
【问题描述】:

我在使用带有外键元素的 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;
?> 

【问题讨论】:

  • 请问,您为什么要尝试使用 PHP 代码创建表?在您的项目中访问它之前使用数据库查看器创建它不是更实用吗?
  • @silkfire 虽然我同意你在这种情况下的观点,但如果处理可能涉及CREATE TEMPORARY TABLE 的更复杂的应用程序,了解这些事情会很有用;)
  • @NiettheDarkAbsol 绝对如此,对于临时表来说这绝对是有意义的,但对于可重用表——从开发人员的角度来看——我会发现在 GUI 中设计和构建表要容易得多:)
  • @silkfire 嘿,我有一个控制台,我只是直接在其中输入 SQL - 似乎无法找到一个可以完成我想要的一切的 GUI。 Adminer 不错,但似乎只是半心半意地做外键——我必须创建表,然后编辑键以获得我想要的参数......嗯。

标签: php mysql-error-1064


【解决方案1】:

PRIMARY KEY in a column's definition 是 separate 定义的简写,它读取为PRIMARY KEY (`column_name`)

FOREIGN KEY 没有这样的速记。

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

请注意,您忽略了引用表的列名,您可能还应该有 ON DELETEON UPDATE 参数。

【讨论】:

  • 谢谢 Niet the Dark Absol,我试过了,现在发现了另一个错误。我是新手开发者,请耐心等待:-) 这次的错误是:SQLSTATE[HY000]: General error: 1215 Cannot add foreign key constraint
  • 嗨,也许这不是问题,但仍然要提到,您要作为外键添加的列必须被索引。
猜你喜欢
  • 2012-12-04
  • 2013-11-03
  • 2012-12-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-02-14
  • 2011-12-10
相关资源
最近更新 更多