在不使用exec()的情况下运行MySQL查询列表

时间:2010-02-27 13:19:00

标签: php mysql database-design mysqli exec

我有一个网站需要在安装时手动创建数据库表。目前它们(以及任何初始数据)保存在.sql文件集合中。

我尝试使用带有CLI MySQL的exec()进行自动创建,虽然它可以在一些平台上运行,但它确实很不错,我真的不喜欢这样做,而且很难调试错误,是远离防弹(特别是如果MySQL可执行文件不在系统路径中)。

有更好的方法吗? MySQL query()命令只允许每个查询一个sql语句(这是关键点)。

我认为MySQLi可以解决其中的一些问题,但我对原始的MySQL库进行了相当的投入,但是如果它稳定,兼容并且通常在标准服务器版本上得到支持,我愿意切换,这是一般的改进

如果做不到这一点,我可能愿意从PHP数组/数据结构中进行某种创建 - 这可以说是更清晰,因为它可以更新表以便在原位匹配模式。我假设这可能是一个已经解决的问题,所以任何带有pro / con的示例实现的链接都是有用的!

提前感谢任何见解。

3 个答案:

答案 0 :(得分:1)

Apparently您可以在connecting to the datebase时将65536作为客户端标记传递,以允许多个查询,例如在一个SQL字符串中使用;

您还可以只读取SQL文件的内容,必要时按;展开,并在事务中运行查询以确保所有查询都正确执行。

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

答案 1 :(得分:1)

如果您使用此功能在系统之间迁移数据,请在使用LOAD DATA INFILEhttp://dev.mysql.com/doc/refman/5.1/en/load-data.html)之后考虑使用SELECT ... INTO OUTFILE语法(http://dev.mysql.com/doc/refman/5.1/en/select.html

答案 2 :(得分:0)

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

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

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