作者leo600498 (DKNY)
看板PHP
标题Re: [请益]SQL和PHP
时间Sat Oct 6 02:15:48 2007
既然问题解决了
就来做一下知识分享
※ 引述《leo600498 (DKNY)》之铭言:
: 我的问题是
: 1. SQL语法在PHP环境中写不进去资料库中
: 2. 最後的那个if判别式也一直出现错误@@
: 注一:$_POST['select']是前一页表单选择要更新的栏位名称
: 注二:$_POST['name1']是前一页要更新的值
: 试了好多次都有错误@@
: 劳烦大家指点一下小弟 >"<
: --------------
: $updateSQL = sprintf("UPDATE user SET '".$_POST['select']."'= '".$_POST['n
: ame1']."' WHERE id='".$_SESSION['id']."'");
这边的SQL run出来会是:
UPDATE user SET '$_POST['select']' = '$_POST['name1']
WHERE id ='$_SESSION['id']'
之所以会run不出来的原因
是'$_POST['select']'的位置本来要填的是栏位名称
栏位名称不用加上
' '
所以正确的语法应该是:
$updateSQL = sprintf("UPDATE user SET
".$_POST['select']." = '".$_POST['n
ame1']."' WHERE id='".$_SESSION['id']."'");
: mysql_select_db($database_connection, $connection);
: $Result1 = mysql_query($updateSQL, $connection) or die(mysql_error());
: if($Result1)
: {echo '修改成功';
这边因为冲码的关系('会被当成字元)所以在尾巴加上!
变成{echo '修改成功
!';
: }
: else
: {echo '修改失败' ;
同上
: }
: 拜托大家了
: 拜托拜托拜托
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 140.115.204.211
1F:推 buganini:栏位名称最好用`包起来, 不然万一栏位名称是保留字的时候 10/06 02:27
2F:→ buganini:会炸 而且看不出原因.. (譬如用text当field name) 10/06 02:27
3F:→ buganini:还是要提醒你注意一下SQL Injection 10/06 02:28
4F:→ yanli2:其实php,ini开启魔术引号就不用怕冲码的问题了... 10/06 02:30
5F:推 buganini:php6会废掉magic_quote,所以还是自己来吧 10/06 02:55
6F:→ buganini:而且magic_quote也无法解决code用big5造成的问题吧.. 10/06 02:56
7F:→ buganini:事实上我个人也不赞成用addslashes处理sql string 10/06 02:57
8F:→ buganini:你无法确定mysql那边到底能不能正确处理big5 10/06 02:58
9F:→ buganini:用mysql_real_escape_string()吧.. 10/06 02:58
10F:→ buganini:用UTF-8吧.... 10/06 02:59
11F:推 leo600498:恩我也不喜欢用addslashes 谢谢大家给的建议~我会去尝试 10/06 03:24
12F:推 yanli2:可以... 我主机已经完全解决big5中文带来的冲码问题了... 10/06 04:06
13F:推 rackyrose:推 buganini 所说的,请别用这种方式,sql injection 10/06 17:13