我有以下
$bd = new mysqli("localhost","root","","bd");
$title = $_POST['title'];
$text = $_POST['content'];
$id = intval($_SESSION['id']);
$sql = "INSERT INTO `perguntas` (per_number, per_title, per_text, per_usr_id) VALUES (1, ?, ?, ?)";
$query = $bd->prepare($sql);
if ($query) {
$query->bind_param("ssi", $title, $text, $id);
$query->execute();
$query->close();
}
else {
die("Something went wrong");
}
$bd->close();
基本上$query
返回true但不会插入数据库。我试图使用查询而不是语句,我遇到了同样的问题。不确定导致它的原因。
我已经确认了所有变量并且它们包含文本,我只省略了isset()
。
我甚至尝试过使用这个查询:
$sql = "INSERT INTO `perguntas` (per_number, per_title, per_text, per_usr_id) VALUES (1, 'Test', 'test', 1)";
所有表数据类型都是正确的。 per_number
为int,per_title
为varchat,per_text
为文本,per_usr_id
为int。
答案 0 :(得分:0)
1)我认为您已经忘记开始会话:session_start()
因为我发现您试图让$_SESSION['id']
在没有启动的情况下无法检索。
2)也许标题或内容也可能是空字符串。 因此,请确保您正确地从表单传递值。
运行execute
方法后检查您的问题。
检查此代码:
<?php
session_start();
$db = new mysqli("localhost","root","","bd");
$title = trim($_POST['title']);
$text = trim($_POST['content']);
$id = $_SESSION['id'];
if (!$title) throw new Exception('Incorrect or empty title');
if (!$text) throw new Exception('Incorrect or empty text');
if (!is_numeric($id)) throw new Exception('Non numeric id');
$query = 'INSERT INTO `perguntas`
(per_number, per_title, per_text, per_usr_id)
VALUES
(1, ?, ?, ?)';
$statement = $db->prepare($query);
$statement->bind_param("ssi", $title, $text, $id);
if (!$statement->execute()) throw new Exception($statement->error);
$statement->close();
$db->close();