2013-06-20 3 views
2

Я конвертирую от mysql_ в mysqli_ и по-прежнему новичок в mysqli_. Вот мой код:mysqli_stmt_bind_param переменный тип

$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).

В результате данные succesfuly вставлены в таблицу, работа по назначению или я делаю неправильно?

+0

Что такое типы полей таблицы – DevZer0

+0

* sidenote: * подготовленный оператор НЕ обязателен в MySQLi. Подготовленный оператор работает медленнее, чем стандартный запрос. – Raptor

+2

@ShivanRaptor: Так что вы предлагаете вместо этого? Ручное экранирование и интерполяция значений в запросы? – icktoofay

ответ

0

На самом деле функции связывания (mysqli_stmt_bind_param или PDOStatement::bindParam) не являются функциями проверки. Вы показываете, как интерпретировать только ваше значение и какой тип значения вы хотите получить от результата.

Ответ: это работа по назначению.

+0

так что флаг работает как 'i' === intval()/(int) правильно? –

+0

В значительной степени, да. Altrough это преобразование происходит только тогда, когда вы эффективно выполняете инструкцию. – Havenard

0

Являются ли поля в таблице, которые этот оператор задает как целое/плавает? Или они настроены как строки в базе данных (некоторые люди делают это по любой причине). Кроме того, поскольку для подготовленных операторов медленнее, я считаю, что это только тот случай, когда запускается один раз уникальный запрос. Если вы делаете несколько запросов в цикле, готовые операторы, я считаю, значительно быстрее (при условии, что оператор был построен вне цикла).

0

Исходная переменная может быть любого типа на самом деле, но она будет пытаться преобразовать в строку при подготовке запроса, потому что это тот тип, который вы сказали в запросе.

Что действительно важно, это типы полей в таблице. Я не уверен, как PHP обрабатывает это, но если запрос принимает целое число (i), и вы пытаетесь подготовить его как строку (s), это может привести к ошибке. В любом случае вы должны указать правильный тип, чтобы избежать проблем.

Смежные вопросы