gpt4 book ai didi

php - 我可以使用 PDO 参数化语句创建 MYSQL 表吗?

转载 作者:行者123 更新时间:2023-11-29 01:22:57 24 4
gpt4 key购买 nike

我想使用 PHP 和 PDO 创建一个 MySQL 表。我也想参数化表名。我已经尝试实现此代码,但有错误,如下所示。

class databaseaccess {

public $hostname = 'localhost';
public $username = 'root';
public $password = 'root';
private $db = null;
public $rows;

public function __construct() {
try {
$this->db = new PDO("mysql:host=$hostname;dbname=noteshareproject", $this->username, $this->password);
}
catch (PDOException $Exception) {
throw new Exception("DB failed to connect ".$Exception->getMessage());
}
}

public function writetable($title,$id){
if ($this->db === null) throw new Exception("DB is not connected");
//query works with `:title` however keeps the commas. Gotta find out what is wrong.
$query = "CREATE TABLE noteshareproject.:title (id INT NOT NULL AUTO_INCREMENT, PRIMARY KEY(id), username VARCHAR(20)) ENGINE=myISAM;";
$statement = $this->db->prepare($query);
$title = $title . $id;
$title = (string) $title;
$statement->bindValue(':title', $title, PDO::PARAM_STR);
$statement->execute();
print_r($statement->errorInfo());
echo $title;

}
}

以上代码输出结果如下:

Array
(
[0] => 42000
[1] => 1064
[2] => You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ''exampletablename'(id INT NOT NULL AUTO_INCREMENT, PRIMARY KEY(id), username VARCHAR(20)) EN' at line >2
)
exampletablename

我在 MySQL 语法或 PDO 实现中做错了什么?

最佳答案

您不能在标识符的准备语句中使用占位符(列/表/数据库/函数名称等)。您只能将它们用于值。

CREATE TABLE noteshareproject.:title
// ^^^^^^ this will not work

您必须手动清理 $title,以便它可以直接在字符串中使用(如果您想要这样做的话)。

另请注意 DDL无法准备诸如 CREATE TABLE 之类的语句,因此没有必要使用 prepare()。您不妨使用 query()exec() .

我也想知道你想要这样做的事实是否表明数据库设计不佳 - 要求多个相同结构的表不太可能是存储信息的正确方法,尽管不知道关于您的应用程序的更多信息,无法确定。

关于php - 我可以使用 PDO 参数化语句创建 MYSQL 表吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12910891/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com