Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/macos/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 如何参数化use语句?_Mysql_Prepared Statement - Fatal编程技术网

Mysql 如何参数化use语句?

Mysql 如何参数化use语句?,mysql,prepared-statement,Mysql,Prepared Statement,目标是在mysql脚本中执行以下tripplet,并对进行单一定义: 删除架构(如果存在) 创建架构默认字符集utf8 使用 接下来是一组create table命令,用于将表插入当前模式 我使用了用户变量@schema\u name像set@schema\u name='database'。这就需要准备上述sql语句: set @drop = concat('drop schema if exists ', @schema_name); set @create = concat('cr

目标是在mysql脚本中执行以下tripplet,并对
进行单一定义:

  • 删除架构(如果存在)
  • 创建架构默认字符集utf8
  • 使用
接下来是一组
create table
命令,用于将表插入当前模式

我使用了用户变量
@schema\u name
set@schema\u name='database'
。这就需要准备上述sql语句:

set @drop   = concat('drop schema if exists ', @schema_name);
set @create = concat('create schema ', @schema_name, ' default character set utf8');
set @use    = concat('use ', @schema_name);

prepare st_drop   from @drop;
prepare st_create from @create;
prepare st_use    from @use;

execute st_drop;
execute st_create;
execute st_use;
问题是,
use
语句不能以这种方式执行:

错误代码:1295。准备好的语句协议尚不支持此命令


是否有其他选项可以选择当前模式,如
use database
作为参数传递的选项?

这通常通过动态SQL实现(在oracle中称为
execute immediate
,在MSSQL中称为
exec()
),但MySQL也不支持它,虽然可能是v6。mysql脚本是唯一的选项吗?您是否可以使用其他语言将这些语句构造为字符串并执行它?@Timekiller:是的,唯一的选项。该脚本相对较长,“手工编写”,手工维护,并将其完全重写为反映
的准备好的语句有点过火了。嗯。。。可能还有一条出路,您如何执行上述脚本?某种IDE、mysql源代码命令、mysql