2013-06-20 51 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)相应的变量类型。

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

+0

什么是表字段类型 – DevZer0

+0

*旁注:*准备好的语句在MySQLi中不是必须的。准备好的语句比标准查询慢。 – Raptor

+2

@ShivanRaptor:那么你会怎么建议呢?手动转义并将值插入查询中? – icktoofay

回答

0

实际上绑定函数(mysqli_stmt_bind_paramPDOStatement::bindParam)不是验证函数。您只展示如何解释您的价值以及您想从结果中获得何种价值。

答案是:它按预期工作。

+0

所以标志就像'我'=== intval()/(int)对吗? –

+0

非常好,是的。只有当你有效地执行语句时,这种转换才会发生。 – Havenard

0

此语句目标表中的字段设置为整数/浮点数吗?或者他们是否在数据库中设置为字符串(有些人会这样做,无论出于何种原因)。另外,对于准备好的语句比较慢,我相信只有在运行一次运行一次唯一查询时才是这种情况。如果您在循环中进行多个查询,我相信,准备好的语句显着更快(假设语句是在循环之外构建的)。

0

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

真正重要的是表中字段的类型。我不确定PHP如何处理这个问题,但如果查询需要一个整数(i),并且您尝试将其作为字符串(s)准备,则可能会导致错误。无论如何,你应该指定正确的类型以避免问题。