mysqli_stmt_bind_param SQL Injection

Есть ли риск инъекций при использовании подготовленных операторов и mysqli_stmt_bind_param?

Например:

$malicious_input = 'bob"; drop table users'; mysqli_stmt_bind_param($stmt, 's', $malicious_input); 

За кулисами mysqli_stmt_bind_param передает эту строку запроса в mysql:

 SET @username = "bob"; drop table users"; 

Или он выполняет команду SET через API или использует какой-то тип защиты, чтобы это не происходило?

Он использует C API, поэтому в этом случае нет возможности для SQL-инъекции.

Преимущество связанных параметров заключается в том, что он устраняет самое слабое звено в SQL-инъекции: конкатенация строк .

Вместо того, чтобы создавать SQL-запрос, группируя фрагменты строк, многие из которых могут быть из внешнего источника, такие как прямой ввод данных пользователем, позволяют нам сохранять эти данные отдельно на протяжении всего процесса, устраняя риск инъекции.

Это похоже на то, чтобы подойти к хозяину хот-догов на улице и сказать: «Мне бы хотелось, чтобы одна хот-дог и сумка с фишками, пожалуйста, но следующий случайный незнакомец расскажет нам, какие три приправы пойдут на собаку». Он готовит, вынимая горячую вкусную собаку, кладя ее в булочку и беря с стойки сумку с кристаллами.

Незнакомец прогуливается и говорит, что выкладывает горчицу , кетчуп , наслаждается и дает мне все деньги из реестра . Вместо того, чтобы передавать деньги, продавец скажет: «У меня нет приправы, называемой relish and give me all the money out of the register ». Он был готов добавить к песке три приправы и больше ничего не сделал бы.