PDO MYSQL 创建表格,如果表格不存在则创建,并查找表格是否已经被创建。

4
有没有可能向PDO询问一个数据库连接是否仍然有效?
CREATE TABLE IF NOT EXISTS

这条语句是否实际创建了一个表格?我正在寻找类似的东西来检查INSERT IGNORE语句后的lastInsertID。如果您从PDO中没有得到lastInsertID的结果,那么就没有插入数据(因为已存在相同的键)。


1
如果条件为真,则执行“great”,否则执行“not so great”。简而言之。 - Funk Forty Niner
@funky Forty Niner:好的,谢谢。但问题是,我从哪里获取条件参数? - Benedikt
你可以将一个变量分配给一个查询,并检查它是否成功,然后在 else{} 中检查错误。这是我从中得到的信息:http://php.net/manual/en/pdo.error-handling.php。 - Funk Forty Niner
@FunkFortyNiner 没错,在这种特殊情况下没有引发任何错误。 - Shadow
1个回答

3

虽然mysql文档对此的解释不是很清楚,但if not exists从句将导致mysql在表存在时发出警告。不幸的是,PDO只会捕获mysql错误而不是警告,因此您需要在create table之后执行一个show warnings SQL语句并解析其结果以检查是否已经发生了任何警告:

$warnings = $pdoconn->query("SHOW WARNINGS")->fetchObject();
// example output of $warnings OR NULL
// stdClass Object
// (
//        [Level] => Warning
//        [Code] => 1050
//        [Message] => Table '...' already exists
// )

如果没有出现警告表已经存在的情况,且create table语句未引发其他错误,则最后一个create table语句创建了该表。
说实话,不使用if not exists子句然后只使用标准PDO异常处理来捕获MySQL错误(如果表存在)可能更简单。 if not exists子句真正是为了长SQL脚本而设计的,这些脚本没有适当的错误处理。

我想我会选择PDO异常处理,对我来说似乎是最安全的解决方案。 - Benedikt

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接