Php mysqli_stmt_bind_param变量类型

Php mysqli_stmt_bind_param变量类型,php,mysqli,Php,Mysqli,我正在从mysql\uu转换到mysqli\u,并且仍然是mysqli\u的新手。这是我的密码: $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

我正在从
mysql\uu
转换到
mysqli\u
,并且仍然是
mysqli\u
的新手。这是我的密码:

$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\u stmt\u bind\u param ss(string,string)
中相应的变量类型

结果是数据成功插入到表中,是按预期工作还是我做错了?

实际上绑定函数(
mysqli_stmt_bind_param
PDOStatement::bindParam
)不是验证函数。您将演示如何仅解释您的值,以及希望从结果中获得什么类型的值


答案是:它按预期工作。

此语句目标表中的字段是否设置为整数/浮点数?或者它们被设置为数据库中的字符串(有些人这样做,无论出于什么原因)。另外,对于准备语句速度较慢的情况,我认为只有在运行一次运行的唯一查询时才会出现这种情况。如果您在一个循环中进行多个查询,我相信准备好的语句要快得多(前提是该语句是在循环之外构造的)。

源变量实际上可以是任何类型,但在准备查询时它会尝试转换为字符串,因为您所说的查询就是采用这种类型的


真正重要的是表中字段的类型。我不确定PHP如何处理这个问题,但如果查询采用整数(
I
),而您试图将其准备为字符串(
s
),则可能会导致错误。在任何情况下,您都应该指定正确的类型以避免出现问题。

表字段类型是什么表示:在MySQLi中,prepared语句不是必须的。“准备好的语句比标准查询慢。@ShivanRaptor:那么您有什么建议?手动将值转义和插值到查询中?当然可以
mysqli\u real\u escape\u string()
做得很好。@DevZer0 varchar和longtext。但如果$a或/和b$字符串和一个或两个变量类型“i”,则不会插入数据。基本上,是的。Altrough此转换仅在有效执行语句时发生。