将用户提交的撇号存储在数据库PHP中

时间:2013-12-28 11:03:17

标签: php mysql database

此脚本允许用户在数据库中存储单词:

submit.php 脚本:

<html>
<body>

<form action="welcome.php" method="post">
Sentance: <input type="text" name="name"><br>
<input type="submit">
</form>

</body>
</html> 

welcome.php 脚本:

<html>
<body>
<?php 
echo $_POST["word"];

mysql_connect("xxxx","xxxx","xxxx");
mysql_select_db("xxxx");
$word1 = $_POST['word'];
mysql_query("INSERT INTO words VALUES ('$word1');");
?>
<br>

</body>
</html> 

问题在于,如果用户提交了包含撇号的单词,则不会将其存储在数据库中。

例如word:

hello'world

没有存储,因为它包含撇号..

如何解决此问题?

2 个答案:

答案 0 :(得分:2)

哇,你应该清理你的输入,不要使用mysql_query作为它的弃用。

请查看mysqli_real_escape_string以逃避这些非常糟糕的角色。

然后查看mysqliPDO以替换mysql_query。

现在的代码让你可以接受注射。

答案 1 :(得分:2)

你的代码对sql注入是开放的。首先,我强烈建议您停止使用mysql_系列函数,不推荐使用它们。如果必须,那么make以逃避用户输入。不过,我强烈建议您使用PDO

$dbh = new PDO('mysql:host=localhost,port=3306,username=user,password=pass', 'user', 'pass');
$stmt = $dbh->prepare("INSERT INTO words VALUES (:word)");
$stmt->bindParam(':word', $word);
$word = $_POST['word'];
$stmt->execute();