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行) 展开
<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行) 展开
2个回答
展开全部
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']));
展开全部
是不是你有些字段不能为空值,但你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")';
就没有问题,只不过插入的是这三个字符串
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询