9 полезных советов и фрагментов кода для PHP для лучших результатов

1. Используйте готовые инструкции при работе с базами данных, чтобы предотвратить SQL инъекции

Источник: https://stackoverflow.com/a/60496/9478774

$stmt = $pdo->prepare('SELECT * FROM employees WHERE name = :name');

$stmt->execute([ 'name' => $name ]);

foreach ($stmt as $row) {
    // Do something with $row
}

Этот код используется для настройки соединения, его можно скопировать.

$dbConnection = new PDO('mysql:dbname=dbtest;host=127.0.0.1;charset=utf8', 'user', 'password');

$dbConnection->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
$dbConnection->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

$preparedStatement = $db->prepare('INSERT INTO table (column) VALUES (:column)');

$preparedStatement->execute([ 'column' => $unsafeValue ]);

2. Готовые инструкции для динамических запросов? Ограничьте возможные значения, используя if else

Источник: https://stackoverflow.com/a/60496/9478774

if (empty($dir) || $dir !== 'DESC') {
   $dir = 'ASC';
}
// only 2 possible options

3. Проверьте, содержит ли строка конкретное слово

Источник: https://stackoverflow.com/a/4366748/9478774

// @ver below 8
$a = 'How are you?';

if (strpos($a, 'are') !== false) {
    echo TRUE;
}

// @ver 8
if (str_contains('How are you', 'are')) {
    echo TRUE;
}

4. Обрабатывайте undefined index/offset с помощью array_key_exists() или isset()

Источник: https://stackoverflow.com/a/4261200/9478774

//isset()
$value = isset($array['my_index']) ? $array['my_index'] : '';
//array_key_exists()
$value = array_key_exists('my_index', $array) ? $array['my_index'] : '';

5. Когда нужно получить значение $_POST или $_GET, или $_REQUEST, можно использовать isset() или !empty()

Источник: https://stackoverflow.com/a/4261200/9478774

$value = isset($_POST['value']) ? $_POST['value'] : '';
//empty()
$value = !empty($_POST['value']) ? $_POST['value'] : '';

//for PHP 7 and later
$value = $_POST['value'] ?? '';

6. Вывод ошибок на PHP

Источник: https://stackoverflow.com/a/21429652/9478774

ini_set('display_errors', '1');
ini_set('display_startup_errors', '1');
error_reporting(E_ALL);

7. Всегда помни о require_once() в 99,99% случаев

Если сравнивать с include(), функция require() обрабатывает ошибки по-другому. Она остановит выполнение скрипта, в то время как include() продолжит скрипт, несмотря на ошибку.

8. Вспомогательные функции для редиректа

Источник: https://stackoverflow.com/a/768472/9478774

function redirect($url, $statusCode = 303)
{
   header('Location: ' . $url, true, $statusCode);
   die();
}

9. Возвращай JSON этим скриптом

Источник: https://stackoverflow.com/a/4064468/9478774

<?php
$data = /** whatever you're serializing **/;
header('Content-Type: application/json');
echo json_encode($data);