Я понимаю подготовленные заявления с использованием PHP и MySQL. Я попытался прочитать некоторые учебные пособия, руководство и этот: Bind_Param в PHP, Но. пока не найдено ни одного удовлетворительного ответчика.
Кто-то написал в ответ как:
When you prepare an SQL statement, you can insert a placeholder (?)
,
where a column value would go, then use bind_param() to safely
substitute that placeholder for the real column's value. This prevents
any possibility of an SQL injection
Я нашел некоторый код в учебниках, как это:
$stmt = $con->prepare("INSERT INTO user_accounts VALUES (?,?,?,?)");
$stmt->bind_param('xyz', $sample1, $sample2, $sample3, $sample4); // bind to the parameter
Я понял, что мы пишем ‘?’ вместо наших переменных, так что фактические значения могут быть даны позже. и mysql готовят план для выполнения запроса, а переменные задаются в качестве параметров.
Но, скажите мне, что говорит эта строка кода?
bind_param('xyz', $sample1, $sample2, $sample3, $sample4);
четыре переменные даются с чем-то ‘xyz’ в качестве параметров … Что именно здесь делает параметр ‘xyz’? Нужно ли писать и будет ли оно позже использовано? я не нашел его в другом месте.
Кто-нибудь может мне объяснить? Пожалуйста, помогите.
РЕДАКТИРОВАТЬ:
Я только хочу ответить за это. Если вы можете объяснить, пожалуйста, помогите:
Я думаю, вы понимаете концепцию параметров привязки, поэтому я не буду вдаваться в подробности. Тем не менее, вы можете рассмотреть этот для получения дополнительной справочной информации.
API-интерфейс mysqli для привязки параметров, возможно, не очень элегантен. Это выглядит так:
bool mysqli_stmt::bind_param ( string $types , mixed &$var1 [, mixed &$... ] )
Это означает, что первый аргумент этой функции, $types
, дает MySQL информацию о том, что типы ваши параметры / как это должно относиться к ним. После этого приведены индивидуальные параметры.
$types
Аргумент — это строка отдельных символов, каждый из которых обозначает тип. Есть четыре возможных типа: i
, d
, s
а также b
, которые обозначают целое число, двойной, строка а также двоичный. Так что если вы хотите связать два целых числа и одну строку, в таком порядке, $type
параметр должен быть iis
, Затем вы следуете этим фактическим значениям:
$int1 = 42;
$int2 = 11;
$str = 'foo';
$stmt->bind_param('iis', $int1, $int2, $str);
xyz указывает тип данных столбца. например, если у нас есть четыре столбца и все они имеют строковый тип, мы пишем:
$stmt->bind_param('ssss', $sample1, $sample2, $sample3, $sample4);
если один столбец имеет integer
типа мы используем i
вместо s
, например, если третий столбец integer
, мы пишем:
$stmt->bind_param('ssis', $sample1, $sample2, $sample3, $sample4);
указать, что первый и второй столбцы являются строковыми (s
) и третий integer
(i
) и четвертая строка (s
).
для первого параметра bind_parameter
функция, которую мы используем s
для строковых типов, i
обозначает integer
, d
для double
тип и b
для blob
,
так что для вашего случая, sssd
означает, что четвертый столбец double
а остальные string