我有一个用PHP编写的Web服务,它返回JSON结果。它运作良好,并已经过全面测试。
我需要在服务调用中添加日志记录(谁调用和何时调用)。我使用SQLite数据库(用于非常少量的数据)和PDO实现了这一点。日志记录的一个条件是它不应该损害Web服务本身。我正在记录他的呼叫这一事实对用户来说无关紧要,记录过程中的任何错误也不应阻止任何服务呼叫。
我实现了一个Log类和一个需要SQL字符串的“execute”函数:
function __construct() {
$this->dbConn = 'sqlite:' . realpath("myLog.sqlite");
try {
$this->db = new PDO($this->dbConn);
}
catch (PDOException $e) {
//I don't care
}
}
private function execute($sql) {
try {
$query = $this->db->prepare($sql);
$query->execute();
}
catch(Exception $e) {
//I don't care
}
}
然后我在每个服务函数的末尾添加了一个类似于此的调用:
$sql = "INSERT INTO $table(id, Time) VALUES('$id', datetime('now','localtime'))";
$this->execute($sql);
$jsonResult = doSomething($id);
return $jsonReuslt;
问题是:我不时在客户端上得到一个包含致命错误字符串(指向此行$query->execute()
)的字符串,表示它不是对象。
到目前为止,在所有情况下,我都将其追溯到错误的SQL查询。但我需要的是一种确保原始JSON返回的方法,即使日志功能中存在错误。
如果我调用$this->execute($sql)
时无论发生什么,我怎样才能确保 - $ jsonResult将返回实际的JSON结果?
TIA,
盖
答案 0 :(得分:1)
在执行查询之前测试准备查询的结果 - 如果语句无法成功准备,server will return false(或抛出异常)。
$query = $this->db->prepare($sql);
if ($query)
$query->execute();