在数据库上添加记录

时间:2014-06-06 12:56:57

标签: php sql

我遇到了一个保存查询的奇怪问题,我想更好地了解如何解决它。

我有一个包含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 ButtonNameTelephone存储在TBL_PERSON上,但未存储在TBL_ADDRESS上。

1 个答案:

答案 0 :(得分:0)

除了discussion on the use of deprecated an insecure mysql_* functions之外,我认为这是解释调试问题的方法的好机会。

在mysql_ *查询函数的替换中,会在错误上引发异常,允许您将查询包装在try / catch块中并相应地处理它。在mysql_query()的情况下,您只需从函数返回false。因此,为了能够调试并因此发现错误,您需要执行以下操作(from the PHP manual):

$result = mysql_query('SELECT * FROM myTable');
if (!$result) {
   die('Invalid query: ' . mysql_error());
}

如果您的查询失败,您会看到为什么,这在调试中非常重要。

如评论中所述,您不会转义任何值。除了您根本不应该使用这些功能(请参阅mysqliPDO)之外,您至少应使用mysql_real_escape_string()方法转义您的值:< / p>

$value = mysql_real_escape_string($value);

如果您遵循上述逻辑,您将看到导致该问题的原因,并且我怀疑使用正确的值转义来成功修复它。如果它不是值,则可能是数据库架构设计存在问题,例如不可为空且没有默认值的列,但您可能传递空值。