Тип переменной mysqli_stmt_bind_param

Я 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 ), и вы пытаетесь подготовить его как строку (строки), это может привести к ошибке. В любом случае вы должны указать правильный тип, чтобы избежать проблем.