我有以下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.
有人可以告诉我这里我做错了什么吗?
答案 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...; """
看看是否有效