【发布时间】: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