Я mysql_
от mysql_
к mysqli_
и все еще новичок в mysqli_
. Вот мой код:
$stmt = mysqli_prepare($con, "INSERT INTO test VALUES (?, ?)"); mysqli_stmt_bind_param($stmt, 'ss', $a, $b); $a=1; $b=1.5; mysqli_stmt_execute($stmt);
Мой вопрос:
$a has Integer value $b float
но соответствующий тип переменной в mysqli_stmt_bind_param ss (string,string)
.
результат – это данные, которые вставляются в таблицу, работает по назначению или я ошибаюсь?
На самом деле функции bind ( mysqli_stmt_bind_param
или PDOStatement::bindParam
) не являются функциями проверки. Вы показываете, как интерпретировать только ваше значение и какой тип значения вы хотите получить от результата.
Ответ: это работа по назначению.
Являются ли поля в таблице, которые этот оператор задает как целочисленные / плавающие? Или они настроены как строки в базе данных (некоторые люди делают это по любой причине). Кроме того, поскольку для подготовленных операторов медленнее, я считаю, что это только тот случай, когда запускается один раз уникальный запрос. Если вы делаете несколько запросов в цикле, готовые операторы, я считаю, значительно быстрее (при условии, что оператор был построен вне цикла).
Исходная переменная может быть любого типа на самом деле, но она будет пытаться преобразовать в строку при подготовке запроса, потому что это тот тип, который вы сказали в запросе.
Что действительно важно, так это типы полей в таблице. Я не уверен, как PHP обрабатывает это, но если запрос принимает целое число ( i
), и вы пытаетесь подготовить его как строку (строки), это может привести к ошибке. В любом случае вы должны указать правильный тип, чтобы избежать проблем.