SQL查询问题

时间:2010-03-30 13:13:24

标签: php mysql

我有以下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时,所有值都设置正确。当我得到$ result时,我得到值1.

有人可以告诉我这里我做错了什么吗?

5 个答案:

答案 0 :(得分:3)

您是否尝试使用某些数据库工具直接运行$ sql的echo?它可能提供更多信息性错误。或者,如果可行,则可能存在未提交事务的问题。通常将连接设置为自动提交事务,但这可能不是这种情况。尝试添加提交。

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

答案 1 :(得分:1)

尝试回显$ sql并直接在任何数据库控制台中运行它,可能没有id = $ id的记录

答案 2 :(得分:1)

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

echo $sql;
exit;

查看实际查询通常会使问题显而易见,特别是当查询包含变量时。如果问题仍然不明显,您可以将查询原样粘贴到查询浏览器中,以直接从数据库引擎获取反馈。

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

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

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

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

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

当回应上述查询时,我们看到:

SELECT * FROM ducksWHERE duck <> 'goose'

我猜您WHERE声明中的UPDATE条款与“id = '$id'”不匹配。

另外,id列真的是一个字符串吗?你在这个值周围放了单引号。如果需要,MySQL会将字符串转换为整数,但如果它是一个整数,请保存数据库一些工作并删除单引号。

答案 3 :(得分:1)

SQL注入可以是答案。不是故意的攻击(此刻),但如果您的参数有一些意外的信息,如引号或其他保留字符,您可能会有奇怪的结果。因此,请尝试直接在数据库管理实用程序中运行此SQL。

答案 4 :(得分:0)

尝试这样做

"""update leads set
       category="$Category",
       type="$stype", etc...; """

看看是否有效