我从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)
中对应的变量类型
结果是数据成功插入表,是工作如期或我做错了?
实际上绑定函数(mysqli_stmt_bind_param
或PDOStatement::bindParam
)不是验证函数。你只展示了如何解释你的值,以及你想从结果中得到什么类型的值。
答案是:它是预期的工作
这个语句的目标表中的字段设置为整数/浮点数吗?或者将它们设置为数据库中的字符串(有些人出于某种原因这样做)。另外,至于准备好的语句变慢,我认为只有在运行一次唯一查询时才会出现这种情况。如果你在一个循环中做了几个查询,我相信准备好的语句要快得多(前提是语句是在循环之外构造的)。
源变量实际上可以是任何类型,但在准备查询时,它将尝试转换为字符串,因为这是您所说的查询采用的类型。
真正重要的是表中字段的类型。我不确定PHP如何处理这个,但如果查询需要一个整数(i
),你试图准备它作为一个字符串(s
),它可能会导致一个错误。在任何情况下,您都应该指定正确的类型以避免出现问题。