2010-02-27 197 views
2

我有一个网站需要在安装时手动创建数据库表。目前他们被保存(连同任何初始数据)在一个.sql文件集合中。在不使用exec的情况下运行MySQL查询列表()

我试着用CLI自动创建使用exec()MySQL,虽然它在几个平台上工作,但它是相当flaky,我不喜欢这样做,再加上它很难调试错误和远非防弹(特别是如果MySQL可执行文件不在系统路径中)。

有没有更好的方法来做到这一点? MySQL query()命令只允许每个查询使用一个sql语句(这是一个棘手的问题)。

MySQLi我听说可能会解决这些问题中的一部分,但我对原始MySQL库进行了相当大的投入,但愿意进行切换,只要它是稳定的,兼容的,并且通常在标准服务器版本上受支持,一般。

如果失败了,我可能会愿意从PHP数组/数据结构中进行某种创建 - 这可以说是更干净,因为它可以更新表以便与现场模式匹配。我认为这可能是一个已经解决的问题,因此任何使用pro/con的示例实现的链接都将非常有用!

在此先感谢您的任何见解。

回答

1

Apparently你当connecting to the datebase允许多个查询时,可以通过65536作为客户端标志,例如在一个SQL字符串中使用;

您也可以只读取SQL文件的内容,如果有必要,可以通过;进行爆炸,然后在事务内部运行查询以确保所有查询都正确执行。

另一种选择是看看Phingdbdeploy to manage databases

+0

我会研究这些链接。至于爆炸,它会窒息,如果其中一个插入使用; legitimatley和我认为检测什么时候会太乱想不到。 – Meep3D 2010-02-27 13:33:38

0

您可以通过标准的mysql_ * PHP函数运行模式创建/更新命令。如果你调用query()命令只允许一条语句,只需多次调用它即可。

我真的不明白为什么你需要一切都在同一个电话。

您应该检查每个语句后错误,如果它不能采取补救措施(除非你正使用InnoDB,在这种情况下,你可以包装在一个事务中的所有语句,如果失败回滚。)

+0

问题是,它是从那些可能包含多个命令.sql文件生成后使用LOAD DATA INFILE语法(http://dev.mysql.com/doc/refman/5.1/en/load-data.html) - 创建初始表,然后插入由phpmyadmin创建的行。至于多次运行mysql_query(),它只会多次运行文件中的第一个命令,除非我以编程方式分割文件,并且不知道该代码会是什么样子。 – Meep3D 2010-02-27 13:28:36

+0

请参阅:http://stackoverflow.com/questions/147821/loading-sql-files-from-within-php – 2010-02-27 13:33:51

相关问题