我的尝试:
第一个文件(connopen.php)
<?php
try {
$db = new PDO(DB_DSN, DBUSER, DB_PASSWORD);
$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$db->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
} catch (PDOException $e) {
die('Cannot connecto to database!');
}
try {
$db->beginTransaction();
其他文件(file1.php,file2.php ...)
<?php
include('connopen.php');
...some code using SQL(SELECT, INSERT INTO, UPDATE, DELETE ....)
include('connclose.php');
?>
上一个文件(connclose.php)
<?php
$db->commit();
} catch (PDOException $e) {
$db->rollBack();
..some code to log errors
}
$db = null;
?>
这样就抛出了一个错误(解析错误:语法错误,第11行的/connopen.php意外的$ end),因为我在connopen.php上开始尝试{,我关闭了connclose .PHP
如果有另一种方法可以做类似的事情来防止双三重编码... connopen和connclose源代码将会很感激。感谢
答案 0 :(得分:1)
由于破坏了try语句,语法上存在重大错误。
连接文件应该只是
<?php
try {
$db = new PDO(DB_DSN, DBUSER, DB_PASSWORD);
$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$db->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
} catch (PDOException $e) {
die('Cannot connecto to database!');
}
正确的模式是使用应用程序引导(设置,数据库和外部服务连接等)创建一个文件,该文件将脚本执行路由到不同的php脚本(file1.php,file2.php),根据URL解析结果
答案 1 :(得分:1)
不确定。
只需摆脱connclose.php,交易和try..catches - 你不需要它们
所以,代码变得简单明了
第一个文件(connopen.php)
<?php
$opt = array(
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
PDO::ATTR_EMULATE_PREPARES => false,
);
$db = new PDO(DB_DSN, DBUSER, DB_PASSWORD, $opt);
其他文件(file1.php,file2.php ...)
<?php
include('connopen.php');
...some code using SQL(SELECT, INSERT INTO, UPDATE, DELETE ....)