php - 创建一个以 php 变量为名称的 MySql 表
问题描述
我正在尝试编写一个基本函数,创建一个以名称作为参数的表。
当我执行该函数时,我收到此错误:“您的 SQL 语法有错误;请查看与您的 MySQL 服务器版本相对应的手册,以了解在 '(id int(10) unsigned NOT NULL AUTO_INCREMENT, nom VARCHAR (255),第 1 行的问题"
我查看了许多论坛帖子,似乎这种语法对某些人有效,但对 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;
}
非常感谢。
解决方案
您的 varchar 的默认值必须是 char,因此请使用单引号和 niot 反引号
$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; ";
推荐阅读
- jpa - QueryException:无法解析属性:DESC
- vb.net - 如何使用 VB.NET 从 Azure Key Vault 检索机密
- typescript - 当使用枚举作为对象时,“元素隐式具有‘任何’类型,因为索引表达式不是‘数字’类型”,为什么?
- php - 如何在表单输入中自动添加括号和斜杠?
- r - 箱线图未正确显示
- javascript - 尝试在打开时将数据从数据库传递到引导模式。我该怎么做呢?
- python - python中MATLAB中“audioplayer”和“play”的等效命令?
- php - Opcache 只显示特定目录和子目录
- forms - 我的网站在 http 上发布表单,但不在 https 上
- python - 如何使用 ffmpeg 将多个显式图像路径连接到视频