php向mysql插入数据出错

表单如下:<formmethod="post"action="test.php"><inputtype="text"name="username"><inputtype=... 表单如下:
<form method="post" action="test.php">
<input type="text" name="username">
<input type="password" name="pwd">
<textarea name="content"></textarea>
<button type="submit">评论</button>
</form>
错误提示:
Parse error: syntax error, unexpected T_ENCAPSED_AND_WHITESPACE, expecting T_STRING or T_VARIABLE or T_NUM_STRING in C:\AppServ\www\eg\test.php on line17
test.php:
$query = "INSERT INTO userinfo (username, pwd, content) VALUES ($_POST['username'], $_POST['pwd'], $_POST['content'])";(第17行)
展开
 我来答
hiwff
2014-03-20 · TA获得超过143个赞
知道小有建树答主
回答量:211
采纳率:60%
帮助的人:84.4万
展开全部

mysql语句在执行insert,update时,对于非数字的值,必须加引号,比如

update tablename set attrA='valueA'
update tablename set attrA=valueA;

这样就会报错。对于数字的值,可以不加,加上也不会影响插入效果,比如

update tablename set intAttrA = 1;
update tablename set intAttrA = '1';

这两种都是可以的。


你这里报错的一行代码,假设输入的$_POST['username'] = ‘a’;$_POST['pwd'] = ‘b’;$_POST['content'] = 'c';
在处理后,最后执行的是

INSERT INTO userinfo (username, pwd, content) VALUES (a, b, c);

它的错误就是上面说的非数字类的值,没带引号。

但实际上,正确的语句应该是

INSERT INTO userinfo (username, pwd, content) VALUES (‘a’, ‘b’, ‘c’);

所以你测试的

$query = 'INSERT INTO userinfo (username, pwd, content) VALUES ("username", "pwd", "content")'; 能正确执行。


最后问题的解决方法是:

$query = "INSERT INTO userinfo (username, pwd, content) VALUES ('".$_POST['username']."', '".$_POST['pwd']."', '".$_POST['content'].")";

另外 为了看起来舒服点,可以这么写:
$query = sprintf("INSERT INTO userinfo (username, pwd, content) VALUES ('%s', '%s', '%s);",$_POST['username'],$_POST['pwd'],$_POST['content']);

最后,你这种写法,有Sql注入的风险,从安全角度来讲是不可取的。所以应该这么写:
$query = sprintf("INSERT INTO userinfo (username, pwd, content) VALUES (unhex('%s'),unhex('%s'), unhex('%s'));",bin2hex($_POST['username']),bin2hex($_POST['pwd']),bin2hex($_POST['content']));
追问
解释得很详细,字符串拼接确实没想到,测试了你提供的方法,可行。不过我在w3c找到另一种写法,就是单引号只加在外面:
$query = "INSERT INTO userinfo (username) VALUES ('$_POST[username]')";

经测试也是可以的。
这问题对于新手来说还真是容易犯迷糊。
追答
建议你用这种,可以保障安全 哈哈
$query = sprintf("INSERT INTO userinfo (username, pwd, content) VALUES (unhex('%s'),unhex('%s'), unhex('%s'));",bin2hex($_POST['username']),bin2hex($_POST['pwd']),bin2hex($_POST['content']));
jk蓝蓝
2014-03-20 · TA获得超过137个赞
知道答主
回答量:61
采纳率:0%
帮助的人:59万
展开全部
是不是你有些字段不能为空值,但你post了空值过去插入数据库
更多追问追答
追问
这个提示应该指的是php代码的问题吧。
我换成:
$query = 'INSERT INTO userinfo (username, pwd, content) VALUES ("username", "pwd", "content")';
就没有问题,只不过插入的是这三个字符串
这个提示应该指的是php代码的问题吧。
我换成:
$query = 'INSERT INTO userinfo (username, pwd, content) VALUES ("username", "pwd", "content")';
就没有问题,只不过插入的是这三个字符串
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式