我正在努力让INSERT INTO工作。
if (isset ($_POST['send']) ){
mysql_query('INSERT INTO msg (message, receiver, sender) VALUES ("'.$_POST["message"].', '.$_GET["user"].', '.$sendernick["nick"].'") ');
}
我试图回显每一个变量,然后出现。 但是这个插入没有增加我的数据库。 我在这里搞砸了什么吗?
要查看错误,我添加了此内容,但没有显示:
error_reporting(E_ALL);
ini_set('display_errors','1');
答案 0 :(得分:1)
你忘记了双引号:
mysql_query( 'INSERT INTO msg (message, receiver, sender) VALUES ( "'.$_POST["message"].'", "'.$_GET["user"].'", "'.$sendernick["nick"].'" )' );
另外,请阅读参数绑定和sql注入How can I prevent SQL injection in PHP?。
答案 1 :(得分:1)
您应该避免使用mysql_*
函数,因为它们已被弃用,不再受支持!请考虑使用PDO
,因为它提供了连接到所有类型数据库的常用方法。 Mysqli_*
函数也是一个选项,但这会限制您只使用MySQL
。
以下是如何使用PDO
并使用预准备语句使查询正常工作的示例:
// connect.php
$db_host = '127.0.0.1';
$db_user = 'user';
$db_pass = 'pass';
$db_name = 'database_name';
$db = new PDO('mysql:host='.$db_host.';dbname='.$db_name, $db_user, $db_pass);
// the-script-youre-posting-to.php
require('connect.php');
$message = $_POST['message'];
$receiver = $_GET["user"];
$sender = $sendernick["nick"];
// Using prepared statements almost eliminates the possibility of SQL Injection.
$stmt = $db->prepare("INSERT INTO msg(message, receiver, sender) VALUES (:message, :receiver, :sender)");
$stmt->bindParam(':message', $message);
$stmt->bindParam(':receiver', $receiver);
$stmt->bindParam(':sender', $sender);
$stmt->execute();
有关预准备语句的更多信息,请查看PHP manual。