【发布时间】:2020-08-20 17:08:50
【问题描述】:
我正在尝试编写一个基本函数来创建一个以名称作为参数的表。
当我执行这个函数时,我得到了这个错误: “您的 SQL 语法有错误;请查看与您的 MySQL 服务器版本相对应的手册,以在第 1 行的 '( id int(10) unsigned NOT NULL AUTO_INCREMENT, nom VARCHAR (255), questio' 附近使用正确的语法"
我查看了很多论坛帖子,似乎这种语法对某些人有效,但对 meeee 无效! 这是我的代码:
function connexion_bd() {
$serv ="localhost";
$username = "root";
$pwd = "blah_blah";
$bd ="project";
$connex = mysqli_connect($serv, $username, $pwd, $bd);
if (! $connex) {
page_erreur(ERR_CONNEX, mysqli_connect_error($connex)); exit;
}
return $connex;
}
function creer_jeu_bdd($nom) {
$connex = connexion_bd();
$nom = mysqli_real_escape_string($connex,$nom);
$req = "CREATE TABLE IF NOT EXISTS ".$nom." (
id int(10) unsigned NOT NULL AUTO_INCREMENT,
nom VARCHAR (255),
question text NOT NULL,
reponse1 VARCHAR(256) NOT NULL DEFAULT ``,
reponse2 VARCHAR(256) NOT NULL DEFAULT ``,
reponse3 VARCHAR(256) NOT NULL DEFAULT ``,
bonne_reponse TINYINT(2) UNSIGNED NOT NULL,
foreign key (nom) references jeux(nom),
primary key(`id`)
)ENGINE=InnoDB DEFAULT CHARSET=utf8; ";
$resultat = mysqli_query($connex, $req);
if (!$resultat) {
page_erreur(ERR_REQUETE, mysqli_error($connex));
} elseif (mysqli_num_rows($resultat) > 0) {
page_erreur(ERR_LOGIN, '');
}
mysqli_close($connex);
exit;
}
非常感谢。
【问题讨论】:
-
$nom 为空。另外,
mysqli_real_escape_string我们绝对在这里没用 -
$nom有什么价值?并且默认的双反引号是错误的。您可能的意思是双单引号。硒"When to use single quotes, double quotes, and backticks in MySQL" -
每当您发现自己使用枚举列名(例如,2)时,请考虑您的架构设计是否最佳
-
正确的字符集是
utf8mb4