使用带有不一致数据的msqli绑定参数


Using msqli bind param with inconsistant data

我的问题很简单。。当将bind_param与mysqli扩展一起使用时,您必须告诉mysqli它是字符串、整数、双精度还是blob。

我的问题是我正在使用API从服务中检索数据。有时我会遇到一个问题,期望的数据是一个整数(但没有任何数据,所以它是NULL),这会导致错误。

我应该用哪种方式来解决这个问题:

  1. 告诉msyqli它们都是字符串,并允许空值

  2. 循环遍历每个可能是整数的变量,如果为null,则将其设置为0。

我的查询示例如下:

$stmt->bind_param("issssssisisiiiissssssssiiiiisis", $MLSNumber, $ListPrice, $this->propertyType, $ListingStatus, $this->newAddress, $City, $State, $PostalCode, $SchoolDistrict, $YearBuilt, $AcresApx, $TotalRooms, $Bedrooms, $BathsFull, $BathsHalf, $PublicRemarks, $remark, $remark, $remark, $remark, $remark, $remark, $remark, $ListAgentID, $ListAgentID, $ListOfficeID, $ListAgentID, $ListOfficeID, $this->retsUpdatedDateTime, $ListingID, $this->retsPhotosUpdatedDateTime);

问题是,正如我所说,我不能100%确定返回的值是否存在。如果是,它们将始终是正确的格式(字符串或int),否则,它们为NULL。

感谢您的投入。

如果要使用bind_param()强制执行参数的数据类型,则在尝试执行绑定操作之前,可能需要处理将要作为参数绑定的变量的验证。例如,如果在调用bind_param()之前没有定义变量,则可能需要将该变量显式设置为NULL

只要数据库中的列接受空值,那么使用空值进行插入或更新就不会有问题。然而,如果你试图在WHERE子句的上下文中使用它,那么作为WHERE some_field = ?这样的构造,你将不会有任何运气,提供null值将导致查询失败(因为你确实需要WHERE some_field IS NULL这样的东西。

您没有分享足够的关于您实际准备的语句SQL或您遇到的有问题的数据示例的信息,无法就特定的解决方案提供更多建议。如果你把这些添加到你的问题中,也许你可以得到关于如何处理这个问题的更具体的答案。

不过,最重要的是,如果您正试图在绑定中强制执行特定参数类型的行为,那么在尝试准备语句之前,您应该检查参数,以确保您拥有运行准备好的语句所需的内容。如果不这样做,您将拥有一些脆弱的代码。