Вы можете использовать addcslashes перед подготовленным оператором. Я тестировал на mysql.
$value = addcslashes($value, '%');
$stmt = $db->prepare('select * from products where description like ?');
$stmt->execute(["$value%"]);
Едва ли. Фатальные ошибки называют этим, потому что они являются фатальными. Вы не можете восстановиться от них.
PHP не обеспечивает стандартные средства для ловли и восстановления с фатальных ошибок. Это вызвано тем, что обработка не должна обычно восстанавливаться после фатальной ошибки. Сопоставление строк буфер вывода (как предложено исходным сообщением техника, описанная на PHP.net), определенно опрометчиво. Это просто ненадежно.
Вызов почты () функция из метода обработчика ошибок оказываются проблематичными, также. Если бы у Вас было много ошибок, Ваш почтовый сервер был бы загружен работой, и Вы могли оказаться с непростым ящиком входящих сообщений. Для предотвращения этого Вы могли бы полагать, что выполнение крона периодически просканировало журналы ошибок и отправило уведомления соответственно. Вы также хотели бы изучать программное обеспечение системного мониторинга, такой как Nagios.
<час>Для разговора с битом о регистрации функции завершения работы:
Это верно, что можно зарегистрировать функцию завершения работы, и это - хороший ответ.
точка здесь - то, что мы обычно не должны пытаться восстановиться с фатальных ошибок, особенно не при помощи регулярного выражения против Вашего буфера вывода. Я отвечал принятый ответ , который связался с предложением на php.net, который был с тех пор изменен или удален.
, Что предложение должно было использовать regex против буфера вывода во время обработки исключений, и в случае фатальной ошибки (обнаруженный соответствием против любого настроенного текста ошибки Вы могли бы ожидать), попытайтесь сделать своего рода восстановление, или продолжал обрабатывать. Это не было бы методическими рекомендациями (я верю вот почему, что я не могу найти исходное предложение, также. Я или пропускаю его, или php сообщество подстрелило его).
могло бы стоить отметить, что более свежие версии PHP (приблизительно 5,1), кажется, вызывают функцию завершения работы ранее, прежде чем выходной обратный вызов буферизации будет вызван. В версии 5 и ранее, тот порядок был реверсом (выходной обратный вызов буферизации сопровождался функцией завершения работы). Кроме того, начиная с приблизительно 5.0.5 (который является намного ранее, чем версия 5.2.3 корреспондента), разгружены объекты задолго до того, как зарегистрированная функция завершения работы вызвана, таким образом, Вы не будете в состоянии полагаться на свои объекты в оперативной памяти сделать большую часть чего-либо.
Настолько регистрирующаяся функция завершения работы прекрасна, но вид задач, которые должны быть выполнены функцией завершения работы, вероятно, ограничен горсткой нежных процедур завершения работы.
ключевая еда на дом здесь является просто некоторыми словами мудрости для любого, кто натыкается на этот вопрос и видит совет в первоначально принятом ответе. Не делайте regex Ваш буфер вывода.
Журнал фатальных ошибок с использованием Register_Shutdown_function
, который требует PHP 5.2 +:
register_shutdown_function( "fatal_handler" );
function fatal_handler() {
$errfile = "unknown file";
$errstr = "shutdown";
$errno = E_CORE_ERROR;
$errline = 0;
$error = error_get_last();
if( $error !== NULL) {
$errno = $error["type"];
$errfile = $error["file"];
$errline = $error["line"];
$errstr = $error["message"];
error_mail(format_error( $errno, $errstr, $errfile, $errline));
}
}
, вам придется определить error_mail
и Функции format_error
. Например:
function format_error( $errno, $errstr, $errfile, $errline ) {
$trace = print_r( debug_backtrace( false ), true );
$content = "
<table>
<thead><th>Item</th><th>Description</th></thead>
<tbody>
<tr>
<th>Error</th>
<td><pre>$errstr</pre></td>
</tr>
<tr>
<th>Errno</th>
<td><pre>$errno</pre></td>
</tr>
<tr>
<th>File</th>
<td>$errfile</td>
</tr>
<tr>
<th>Line</th>
<td>$errline</td>
</tr>
<tr>
<th>Trace</th>
<td><pre>$trace</pre></td>
</tr>
</tbody>
</table>";
return $content;
}
Использование SWIFT Mailer для записи функции функция error_mail
.
См. Также:
Только что придумал это решение (PHP 5.2.0 +):
function shutDownFunction() {
$error = error_get_last();
// fatal error, E_ERROR === 1
if ($error['type'] === E_ERROR) {
//do your stuff
}
}
register_shutdown_function('shutDownFunction');
Различные типы ошибок определены на http://www.php.net/manual/en/errorfunc .constants.php