以下代码给出了一个错误,你能帮我知道语法问题在哪里吗?
控制器中的代码:
if (in_array($request->get('post_type'), ['newQ', 'newP'])) {
$category = implode(",", $request->get('catBox'));
} else {
$category = $request->get('catBox');
}
错误:
helpers.php中的ErrorException第747行:preg_replace():参数不匹配,pattern是一个字符串,而replacement是一个数组,位于Helle.php第747行,HandleExceptions-> handleError(' 2',& #39; preg_replace():参数不匹配,pattern是一个字符串,而replacement是一个数组',' D:\ wamp \ www \ testSite \ vendor \ laravel \ framework \ src \ Illuminate \ Support \ helpers。 php',' 747',数组('搜索' =>' \?','替换' =>数组(' test',数组('家电','开发'),' Qtop',' 1',& #39; 2016-06-21 07:46:34',' 2016-06-21 07:46:34'),' subject' =>&#39 ;插入帖子(body,cat,post_type,user_id,updated_at,created_at)值(测试,?,?,?,?,?)',' value' =>数组(& #39;家电','发展')))
答案 0 :(得分:1)
首先,您需要在问题中发布更多代码/上下文。你本质上是重复your other question这是粗鲁的。
其次,您的错误与数据库查询失败有关。您似乎正在使用数组['appliances', 'Development']
提交值,而您不应该这样做。您的HTML表单可能有一个数组,在某些情况下您只考虑这一点。试试这段代码:
if (in_array($request->get('post_type'), ['newQ', 'newP'])) {
$category = implode(",", $request->get('catBox'));
} else {
$category = implode(",", $request->get('catBox'));
}
让您的错误更具可读性。
HandleExceptions->handleError(
'2',
'preg_replace(): Parameter mismatch, pattern is a string while replacement is an array',
'D:\wamp\www\testSite\vendor\laravel\framework\src\Illuminate\Support\helpers.php',
'747',
array(
'search' => '\?',
'replace' => array(
'test',
array('appliances', 'Development'),
'Qtop',
'1',
'2016-06-21 07:46:34',
'2016-06-21 07:46:34'
),
'subject' => 'insert into posts (body, cat, post_type, user_id, updated_at, created_at) values (test, ?, ?, ?, ?, ?)',
'value' => array('appliances', 'Development')
)
);
一点点搜索显示HandleExceptions
是一个Laravel类。 The Laravel API docs has a full specification。在文档中,我们看到它需要$context
。 $context
是发生错误时发生的事情。
让我们看看第747行的laravel/framework/src/Illuminate/Support/helpers.php
。我们发现:
/**
* Replace a given value in the string sequentially with an array.
*
* @param string $search
* @param array $replace
* @param string $subject
* @return string
*/
function str_replace_array($search, array $replace, $subject)
{
foreach ($replace as $value) {
$subject = preg_replace('/'.$search.'/', $value, $subject, 1);
}
return $subject;
}
将错误消息与str_replace_array()
进行比较时,我们可以看到错误消息中显示了每个变量和值。由于PHP停止工作,我们可以假设值是错误之前的最后一个值,因此其中一个值是触发错误的值。
在错误消息中,我们看到:
preg_replace():参数不匹配,pattern是一个字符串,而replacement是一个数组
让我们确定"模式"和"替换"通过查看PHP: preg_replace - Manual。显然,它们是函数参数$pattern
和$replacement
。
回顾str_replace_array()
我们可以看到错误消息$search
中的$pattern
和$value
是$replacement
。
现在错误消息应该更有意义。 $pattern
是字符串'\?'
,而$replacement
是数组array('appliances', 'Development')
。