我在保存查询时遇到了一个奇怪的问题,我想更好地了解如何解决它。
我有一个包含2个表的数据库,例如:
TBL_PERSON
person_id
person_name
person_telephone
TBL_ADDRESS
address_id
address_person_id
address_address
address_city
address_zip
现在,我使用这样的查询来存储记录:
$sqlQuery = "INSERT INTO TBL_PERSON (
person_name,
person_telephone
) VALUES (
'$person_name',
'$person_telephone'
)";
$result = MYSQL_QUERY($sqlQuery);
//Get last id
$address_person_id = mysql_insert_id();
$sqlQuery = "INSERT INTO TBL_ADDRESS (
address_person_id,
address_address,
address_city,
address_zip
) VALUES (
'$address_person_id',
'$address_address',
'$address_city',
'$address_zip'
)";
$result = MYSQL_QUERY($sqlQuery);
有时,不会在上添加任何记录TBL_ADDRESS
。用户按下后Insert
,Action Button
,Name
和Telephone
存储在TBL_PERSON
,但没有地址TBL_ADDRESS
。
除非对不赞成使用的不安全mysql_*
函数的使用进行讨论,我认为这是解释此类调试方法的好机会。
在替换mysql_ *查询函数时,错误引发了异常,使您可以将查询包装在try
/catch
块中并进行相应处理。对于mysql_query()
,您将简单地false
从函数中返回。因此,为了能够进行调试并查看出问题所在,您需要执行以下操作(来自PHP手册):
$result = mysql_query('SELECT * FROM myTable');
if (!$result) {
die('Invalid query: ' . mysql_error());
}
如果查询失败,您将看到为什么,这在调试中很重要。
如评论中所述,您不会逃避任何价值观。除了您根本不应该使用这些功能(请参阅mysqli或PDO)之外,您至少应使用以下mysql_real_escape_string()
方法将值转义:
$value = mysql_real_escape_string($value);
如果遵循上述逻辑,您将看到导致此问题的原因,并且我怀疑使用正确的值转义可以成功解决该问题。如果不是该值,那么您的数据库模式设计可能会有问题,例如不可为空且没有默认值的列,但您可能正在传递一个空值。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句