我知道PDO不支持在一个语句中执行多个查询.我一直在谷歌,发现很少有关于PDO_MYSQL和PDO_MYSQLND的帖子.
PDO_MySQL是一个比任何其他传统MySQL应用程序更危险的应用程序.传统的MySQL只允许一个SQL查询.在PDO_MySQL中没有这样的限制,但是您可能会注入多个查询.
From:使用PDO和Zend Framework防止SQL注入(2010年6月;作者Julian)
似乎PDO_MYSQL和PDO_MYSQLND确实支持多个查询,但我无法找到有关它们的更多信息.这些项目是否已停止?现在有没有办法使用PDO运行多个查询.
如何使用php导入mysql数据库中的.sql文件
我怎么能这样做,请帮我解决这个问题谢谢
此代码显示此错误..
There was an error during import. Please make sure the import file is saved in the same folder as this script and check your values:
MySQL Database Name: test
MySQL User Name: root
MySQL Password: NOTSHOWN
MySQL Host Name: localhost
MySQL Import Filename: dbbackupmember.sql
Run Code Online (Sandbox Code Playgroud)
我正在使用此代码
<?php
//ENTER THE RELEVANT INFO BELOW
$mysqlDatabaseName ='test';
$mysqlUserName ='root';
$mysqlPassword ='';
$mysqlHostName ='localhost';
$mysqlImportFilename ='dbbackupmember.sql';
//DONT EDIT BELOW THIS LINE
//Export the database and output the status to the page
$command='mysql …Run Code Online (Sandbox Code Playgroud) 我*.sql在创建新的网站数据库时使用了两个文件.第一个文件创建所有表.第二个文件填充一些默认记录.我想从PHP执行这些文件.我也使用Zend_Framework,如果这将有助于实现这一目标.
附加信息
解
使用shell_exec()......
$command = 'mysql'
. ' --host=' . $vals['db_host']
. ' --user=' . $vals['db_user']
. ' --password=' . $vals['db_pass']
. ' --database=' . $vals['db_name']
. ' --execute="SOURCE ' . $script_path
;
$output1 = shell_exec($command . '/site_db.sql"');
$output2 = shell_exec($command . '/site_structure.sql"');
Run Code Online (Sandbox Code Playgroud)
...我从来没有得到有用的输出,但在另一个线程上遵循一些建议,最后让它全部工作.我切换到命令的格式,而不是执行文件.--option=value--execute="SOURCE ..."<
此外,我从来没有得到shell_exec()和和之间的差异的良好解释exec().
我有一种情况,我必须更新共享主机提供商的网站.该网站有一个CMS.使用FTP上传CMS的文件非常简单.
我还必须导入一个大的(相对于PHP脚本的限制)数据库文件(大约2-3 MB未压缩).Mysql因外部访问而关闭,因此我必须使用FTP上传文件,并启动PHP脚本进行导入.遗憾的是,我无法访问mysql命令行函数,所以我必须使用本机PHP解析和查询它.我也不能使用LOAD DATA INFILE.我也不能像phpMyAdmin一样使用任何一种交互式前端,它需要以自动化的方式运行.我也不能用mysqli_multi_query().
有没有人知道或者有一个已编码的简单解决方案,可以将这样的文件可靠地拆分成单个查询(可能有多行语句)并运行查询.我想避免自己开始摆弄它,因为我可能遇到很多问题(如何检测字段分隔符是否是数据的一部分;如何处理备忘录字段中的换行符;等等上).有必须是这个现成的解决方案.
所以我有一个需要使用mysql_query()加载的SQL转储文件.不幸的是,用它执行多个查询是不可能的.
- >不能假设安装了mysql命令行客户端(mysql --help) - 用于直接加载SQL文件
- >不能假设安装了mysqli扩展
/* contents of dump.sql, including comments */
DELETE FROM t3 WHERE body = 'some text; with semicolons; scattered; throughout';
DELETE FROM t2 WHERE name = 'hello';
DELETE FROM t1 WHERE id = 1;
Run Code Online (Sandbox Code Playgroud)
下面的explode()不起作用,因为某些转储内容的值包含分号.
$sql = explode(';', file_get_contents('dump.sql'));
foreach ($sql as $key => $val) {
mysql_query($val);
}
Run Code Online (Sandbox Code Playgroud)
在不修改转储文件的情况下加载SQL的最佳方法是什么?
我想用.从存储过程中调用sql脚本就像这样...
delimiter ///
create procedure append_procedure()
BEGIN
\. test.sql;
END; ///
delimiter ;
Run Code Online (Sandbox Code Playgroud)
我得到了"未能打开'test.sql;' "我以这种方式运行时出错.我也试过了!但后来我得到了一个拒绝许可的错误.但是,我无法消除; 或者整件事都破了.有没有解决的办法?
我究竟做错了什么?
我有以下几行代码:
sql = "source C:\\My Dropbox\\workspace\\projects\\hosted_inv\\create_site_db.sql"
cursor.execute (sql)
Run Code Online (Sandbox Code Playgroud)
当我执行我的程序时,我收到以下错误:
错误1064:您的SQL语法中有错误; 查看与您的MySQL服务器版本对应的手册,以便在第1行'source C:\ My Dropbox\workspace\projects\hosted_inv\create_site_db.sql'附近使用正确的语法
现在我可以将以下内容复制并发送到mysql作为查询:
source C:\\My Dropbox\\workspace\\projects\\hosted_inv\\create_site_db.sql
Run Code Online (Sandbox Code Playgroud)
它完美无缺.当我检查查询日志以查找我的脚本执行的查询时,它显示我的查询如下:
source C:\\My Dropbox\\workspace\\projects\\hosted_inv\\create_site_db.sql
Run Code Online (Sandbox Code Playgroud)
但是,当我手动粘贴并执行时,整个create_site_db.sql在查询日志中展开,并显示该文件中的所有sql查询.
我在这里错过了mysqldb如何查询的内容吗?我遇到了限制吗?我的目标是运行一个sql脚本来创建模式结构,但我不想在shell进程中调用mysql来获取sql文件.
有什么想法吗?谢谢!
$databases = array();
$path = '/Path/To/Directory';
$main_link = mysqli_connect('localhost', 'USERNAME', 'PASSWORD');
$files = scandir($path);
$ignore_files = array();
foreach($files as $file)
{
if (!in_array($file, $ignore_files))
{
$database = substr($file, 0, strpos($file,'.'));
$databases[] = $database;
mysqli_query($main_link, "DROP DATABASE IF EXISTS $database") or die ("$database 1" . mysqli_error($main_link));
mysqli_query($main_link, "CREATE DATABASE $database") or die ("$database 2" .mysqli_error($main_link));
$db_link = mysqli_connect('localhost', 'USERNAME', 'PASSWORD', $database);
//In here a whole database dump with scheam + data is executed.
mysqli_multi_query($db_link, file_get_contents($path.'/'.$file)) or die ("$database 4" .mysqli_error($db_link));
} …Run Code Online (Sandbox Code Playgroud) 我正在尝试编写一个创建多个表的MySQL脚本.我有:
CREATE TABLE `DataBase1`.`tbl_this`(
...
);
CREATE TABLE `DataBase1`.`tbl_that`(
...
);
... (14 more) ...
Run Code Online (Sandbox Code Playgroud)
但是,只执行第一个CREATE TABLE语句.我没有语法错误.嗯,我错过了MSSQL相当于GO?我在这做错了什么; 我怎么让这个宝宝跑完所有的桌子?
这可能是显而易见的,但我已经通过phpmyadmin将数据库导出到.sql文件.我试图通过PHP脚本将文件导入另一个数据库,但我无法弄清楚如何做到这一点.我确信这很容易,因为我可以通过phpmyadmin运行查询轻松完成同样的事情.有什么建议?