MySQL 查询在由 Phpmyadmin 应用时有效,但在通过 PHP 应用时无效?
MySQL query works when applied by Phpmyadmin, but not when applied through PHP?
我正在尝试将触发器应用于现有的 table 和 PHP 的列。
执行PHP代码时,没有报错,但是没有创建触发器。
我的PHP代码是:
//file: migrations.php
// created_at column already defined in a previous migration
//...
$migrations[3]['message'] = "added created_at, updated_at columns on rate table";
$migrations[3]['created'] = "2015-09-05 08:28:00";
$migrations[3]['sql'] = "
DELIMITER |
CREATE TRIGGER rate_created_at BEFORE INSERT ON rate
FOR EACH ROW
BEGIN
SET NEW.created_at = CURRENT_TIMESTAMP;
END |
DELIMITER ;
";
// apply migration
foreach ($migrations as $key => $value) {
// run the migration SQL for the current iteration
$sth = $dbh->prepare( $value['sql'] );
$sth->execute();
}
这里是的作用
- 正在将触发器创建 SQL 复制并粘贴到 Phpmyadmin
- 摆脱
DELIMITER
和 BEGIN
END
语句
例如如果我将 SQL 减少到
$migrations[3]['sql'] = "
CREATE TRIGGER rate_created_at BEFORE INSERT ON rate
FOR EACH ROW
SET NEW.created_at = CURRENT_TIMESTAMP;
";
它从 PHP 执行 运行,问题是我不相信我可以 运行 没有 DELIMITER
和 BEGIN
END
的多行语句.
我试过了
- 转义分隔符
- 使用不同的分隔符
如何使用 DELIMITER
和 BEGIN
END
语句将 PHP 变为 运行 SQL?
是的,你将不得不摆脱那些DELIMITER
,只需要下面的代码
$migrations[3]['sql'] = "
CREATE TRIGGER rate_created_at BEFORE INSERT ON rate
FOR EACH ROW
BEGIN
SET NEW.created_at = CURRENT_TIMESTAMP;
END;";
看到另一个 post 说同样的话 PHP: multiple SQL queries in one mysql_query statement
我正在尝试将触发器应用于现有的 table 和 PHP 的列。 执行PHP代码时,没有报错,但是没有创建触发器。
我的PHP代码是:
//file: migrations.php
// created_at column already defined in a previous migration
//...
$migrations[3]['message'] = "added created_at, updated_at columns on rate table";
$migrations[3]['created'] = "2015-09-05 08:28:00";
$migrations[3]['sql'] = "
DELIMITER |
CREATE TRIGGER rate_created_at BEFORE INSERT ON rate
FOR EACH ROW
BEGIN
SET NEW.created_at = CURRENT_TIMESTAMP;
END |
DELIMITER ;
";
// apply migration
foreach ($migrations as $key => $value) {
// run the migration SQL for the current iteration
$sth = $dbh->prepare( $value['sql'] );
$sth->execute();
}
这里是的作用
- 正在将触发器创建 SQL 复制并粘贴到 Phpmyadmin
- 摆脱
DELIMITER
和BEGIN
END
语句 例如如果我将 SQL 减少到
$migrations[3]['sql'] = "
CREATE TRIGGER rate_created_at BEFORE INSERT ON rate
FOR EACH ROW
SET NEW.created_at = CURRENT_TIMESTAMP;
";
它从 PHP 执行 运行,问题是我不相信我可以 运行 没有 DELIMITER
和 BEGIN
END
的多行语句.
我试过了
- 转义分隔符
- 使用不同的分隔符
如何使用 DELIMITER
和 BEGIN
END
语句将 PHP 变为 运行 SQL?
是的,你将不得不摆脱那些DELIMITER
,只需要下面的代码
$migrations[3]['sql'] = "
CREATE TRIGGER rate_created_at BEFORE INSERT ON rate
FOR EACH ROW
BEGIN
SET NEW.created_at = CURRENT_TIMESTAMP;
END;";
看到另一个 post 说同样的话 PHP: multiple SQL queries in one mysql_query statement