Так что этот sql предназначен для возврата 1 случайного проекта из таблицы проектов
$sql = "select title, id, user_id, priority from projects
where ( closed = 0 and priority between 7 and 9 AND user_id=$user_id )
ORDER by rand(), priority
limit 1";
Независимо от того, как я переставил их в скобках и т. Д., Запрос возвращает недопустимую ошибку, такую как
Notice: Undefined variable: user_id in /var/www/html/producerswip/includes/functions.php on line 734
Fatal error: Uncaught PDOException: SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ') ORDER by rand(), priority limit 1' at line 2 in /var/www/html/producerswip/includes/functions.php:737 Stack trace: #0 /var/www/html/producerswip/includes/functions.php(737): PDO->prepare('select title, i...') #1 /var/www/html/producerswip/index.php(72): getRandomProject() #2 {main} thrown in /var/www/html/producerswip/includes/functions.php on line 737
ОБНОВЛЕНИЕ Это общий момент ладони лица.Я был так сосредоточен на ошибке оператора sql, что проигнорировал первую строку, в которой фактически указана ошибка.Спасибо @David и другим, у кого глаза открыты.Я также принял совет @David и изменил свой sql на следующий, который менее привлекателен для инъекций sql
$sql = "select title, id, user_id, priority from projects
where ( closed = ? and priority between ? and ? AND user_id=? )
ORDER by rand(), priority
limit 1";
$results = $pdo->prepare($sql) or die(mysqli_error($pdo));
$results->execute([0,7,9,$user_id]);