2010-03-30 168 views
1

我有下面的SQL查询时,我提出我没有得到任何错误,并显示成功的消息,但数据库心不是更新,将更新从一种形式的值到数据库SQL查询问题

$sql= 
    "update leads set 
     category='$Category', 
     type='$stype', 
     contactName='$ContactName', 
     email='$Email', 
     phone='$Phone', 
     altphone='$PhoneAlt', mobile='$Mobile', 
     fax='$Fax', 
     address='$Address', 
     city='$City', 
     country='$Country', 
     DateEdited='$today', 
     printed='$Printed', 
     remarks='$Remarks' 
    where id='$id'"; 

    $result=mysql_query($sql) or die(mysql_error()); 
echo '<h1>Successfully Updated!!.</h1>'; 

。当我回显$ sql时,所有的值都设置正确。当我得到$结果我得到的价值1.

有人可以请告诉我我在做什么错在这里?

+2

Echo $ sql并针对您的数据库手动运行生成的SQL - 您应该发现它不会更新。调整PHP之外的查询,直到它正确更新,然后在PHP中进行更改。 – 2010-03-30 13:16:42

+0

@LiveEn:你确定'$ id'是现有行的ID吗?您可以使用'mysql_affected_rows'(http://php.net/mysql_affected_rows)来判断查询是否与任何行匹配。另外,mysqli(http://php.net/mysqli)和PDO(http://php.net/PDO)比过时的mysql驱动程序更可取。 – outis 2010-03-30 13:18:54

+0

是的.. ID是显示当回声 – LiveEn 2010-03-30 13:26:16

回答

1

如果您有没有给出预期的结果或接收到错误的查询,并且问题不明显,通常应该在运行之前查看最终查询。试运行查询之前使用这一权利:

echo $sql; 
exit; 

查看实际的查询往往使得它明显的问题是什么,尤其是当查询包括的变量。如果问题仍然不明显,可以将查询原样粘贴到查询浏览器中,以直接从数据库引擎获取反馈。

有趣的是,使用参数化查询,您将无法看到参数值,因为参数被MySQL取代,而不是PHP,但您仍然可以看到整个准备好的查询。

此外,您可以使用mysql_affected_rows()函数查看UPDATE语句中受影响的行数。在查询运行后,您可以立即将其设置为:

echo ("Updated records:", mysql_affected_rows()); 

连接查询时经常会遗忘空格。

$sql = "SELECT * FROM ducks"; 
$sql .= "WHERE duck = 'goose'"; 

当呼应上面的查询,我们可以看到:

SELECT * FROM ducksWHERE duck <> 'goose' 

我猜你UPDATE语句WHERE子句不匹配的“id = '$id'”。

此外,ID列真的是一个字符串?您已将单引号放在该值的附近。如果需要,MySQL会将字符串转换为整数,但如果它是整数,则保存数据库的某些工作并删除单引号。

+0

谢谢...在ID有一个小问题..现在它工作fyn。 – LiveEn 2010-03-31 06:12:26

3

您是否尝试过使用某些数据库工具直接运行$ sql的回声?它可能会提供更多信息错误。或者,如果有效,您可能会遇到交易未提交的问题。通常连接被设置为自动提交事务,但这可能不是这种情况。尝试添加一个提交。

你有没有听说过SQL injection攻击?

+2

我希望有一天,当这个结构类别='$类别'将被禁止在PHP ... – Andrey 2010-03-30 13:16:39

+0

我knw abt的SQL注入攻击,但这是一个简单的内部应用程序,所以现在需要担心安全问题。 – LiveEn 2010-03-30 13:27:46

+0

嘿@Andrey ORDER BY $ Category怎么样? :) – 2010-03-30 13:56:26

1

尝试回声$ SQL和直接在任何数据库控制台运行它,可能是没有记录使用id = $ ID

1

SQL注入可以是答案。不是有意的攻击(此时),但如果你的参数有一些意想不到的信息,如引号或其他保留字符,你可能会得到奇怪的结果。所以,试着直接在数据库管理工具中运行这个SQL。