Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/276.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
Php 使用DB::query处理Silverstripe中的MySQL错误_Php_Error Handling_Silverstripe - Fatal编程技术网

Php 使用DB::query处理Silverstripe中的MySQL错误

Php 使用DB::query处理Silverstripe中的MySQL错误,php,error-handling,silverstripe,Php,Error Handling,Silverstripe,我正在寻找一种方法,在使用DB::query() 代码如下: $sql = "UPDATE $table SET ,,"; // Syntax error added purposefully foreach ($update_array as $key => $value) { $name = $formHelpers->some_filter($key); $content = $formHelpers->some_filter($value); $

我正在寻找一种方法,在使用
DB::query()

代码如下:

$sql = "UPDATE $table SET ,,"; // Syntax error added purposefully
foreach ($update_array as $key => $value) {
    $name = $formHelpers->some_filter($key);
    $content = $formHelpers->some_filter($value);
    $sql .= " $name='$content',";
}
$sql = rtrim($sql, ",");
$sql .= "WHERE id=$id";

$result = DB::query($sql);

可以控制如何使用SilverStripe处理原始SQL错误,以便捕获/阻止显示消息

让我们进一步深入了解SilverStripe代码和(请注意,SilverStripe的其他SQL DB实现可能会以不同的方式处理此问题)

默认情况下,错误级别为
E_USER_error
,因此它将在内部调用更多位,并触发输出到屏幕的用户错误(取决于您的设置)


不幸的是,您无法捕获生成的错误(至少不能没有),因为显示为
$this->dbConn->error
的属性“dbConn”是一个属性。

请在您的问题中更具体一点。什么应该改变,等等。
public function query($sql, $errorLevel = E_USER_ERROR) {
    if(isset($_REQUEST['previewwrite']) && in_array(strtolower(substr($sql,0,strpos($sql,' '))),
        array('insert','update','delete','replace'))) {

        Debug::message("Will execute: $sql");
        return;
    }

    if(isset($_REQUEST['showqueries']) && Director::isDev(true)) {
        $starttime = microtime(true);
    }

    $handle = $this->dbConn->query($sql);

    if(isset($_REQUEST['showqueries']) && Director::isDev(true)) {
        $endtime = round(microtime(true) - $starttime,4);
        Debug::message("\n$sql\n{$endtime}s\n", false);
    }

    if(!$handle && $errorLevel) {
        $this->databaseError("Couldn't run query: $sql | " . $this->dbConn->error, $errorLevel);
    }
    return new MySQLQuery($this, $handle);
}