你知道我的代码有什么问题吗?我无法弄明白。
连接失败:SQLSTATE [42000]:语法错误或访问冲突:1064 SQL语法中出错;检查与您的MariaDB服务器版本对应的手册,以便在第3行使用'VARCHAR(50)NOT NULL,url TEXT(65535)NOT NULL,ip VARCHAR(150)NOT NULL)附近使用正确的语法
<?php
$host = "localhost";
$dbname = "nope";
$username = "nope";
$password = "nope";
if(isset($_GET["s"])){
try{
$pdo = new PDO("mysql:host=".$host.";dbname=".$dbname,$username,$password);
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$table = "links";
$sql ="CREATE TABLE IF NOT EXISTS $table(
ID INT(11) AUTO_INCREMENT PRIMARY KEY,
key VARCHAR(50) NOT NULL,
url TEXT(65535) NOT NULL,
ip VARCHAR(150) NOT NULL)";
$pdo->exec($sql);
} catch (PDOException $e) {
echo 'Connection failed: ' . $e->getMessage();
}
/*$statement = $pdo->prepare("select url from $table where key = :key");
$statement->execute(array(':key' => $_GET["s"]));
$result = $statement->fetch();
echo $result;*/
}
else{
echo "error";
}
?>
答案 0 :(得分:1)
您的列名key
是reserved keyword in mysql
解决方案是引用反引号中的列名称
`key` VARCHAR(50) NOT NULL,
或者只是将列的名称更改为您喜欢的任何不是保留字的列。
my_key VARCHAR(50) NOT NULL,
所以你的陈述应该是
$sql ="CREATE TABLE IF NOT EXISTS $table(
ID INT(11) AUTO_INCREMENT PRIMARY KEY,
`key` VARCHAR(50) NOT NULL,
url TEXT(65535) NOT NULL,
ip VARCHAR(150) NOT NULL)";
或
$sql ="CREATE TABLE IF NOT EXISTS $table(
ID INT(11) AUTO_INCREMENT PRIMARY KEY,
table_key VARCHAR(50) NOT NULL,
url TEXT(65535) NOT NULL,
ip VARCHAR(150) NOT NULL)";
答案 1 :(得分:1)
请尝试以下查询:
CREATE TABLE IF NOT EXISTS $table(
`ID` INT(11) AUTO_INCREMENT PRIMARY KEY,
`key` VARCHAR(50) NOT NULL,
`url` TEXT NOT NULL,
`ip` VARCHAR(150) NOT NULL)
Key
是MariaDB
中的Reserved Word
。因此需要包含在``中。并且无需为类型TEXT