我的问题很简单..当使用bind_param和mysqli扩展时,你告诉mysqli它是字符串,整数,双精度还是blob。
我的问题是我使用API从服务中检索数据。有时我会遇到一个问题,即预期的数据是一个整数(但没有任何东西,所以它是NULL)会导致错误。
我应该采用哪种方式解决问题:
告诉msyqli他们都是字符串并允许空值
循环遍历可能是整数的每个变量,如果为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。
感谢您的投入。
答案 0 :(得分:0)
如果要使用bind_param()
强制执行参数的数据类型,则在尝试执行绑定操作之前,可能需要处理要作为参数绑定的变量的验证。例如,如果在bind_param()
调用之前未定义变量,您可能希望将变量显式设置为NULL
。
只要数据库中的列接受空值,使用空值进行插入或更新就不会有问题。但是,如果您尝试使用此WHERE
子句的上下文,您将不会像WHERE some_field = ?
这样的构造运气,提供空值将导致查询失败(因为您真的需要像WHERE some_field IS NULL
这样的东西。
您还没有充分了解实际准备好的语句SQL或您遇到的有问题的数据示例,以便就特定解决方案提供更多建议。如果您将这些添加到您的问题中,也许您可以获得有关如何解决问题的更具体的答案。
但最重要的是,您正在尝试在绑定中强制执行特定参数类型行为,您应该检查参数以确保您具有运行预准备语句所需的内容,然后才能达到试图准备声明。如果不这样做,你将会有一些脆弱的代码。