Mysqli INSERT与$ _POST

时间:2013-10-23 14:53:29

标签: php database insert mysqli

我已经在这个问题上扯了几天头发,所以任何有用的建议都会受到赞赏。调用以下函数不会返回任何内容。设置POST值(它们使用echo打印),数据库让我更新并提取其他功能。我错过了什么?

哦,是的,所有的值都是字符串。

$stmt = $db->prepare("INSERT INTO content_page (name, layout, page_id) VALUES (?,?,?)");    
$stmt->bind_param("sss", $_POST['name'], $_POST['layout'], $_POST['page_id']);
$stmt->execute();
$stmt->close();

4 个答案:

答案 0 :(得分:1)

乍一看,这段代码没有任何问题(如果您确实使用了mysqli)。因此,唯一方式来了解出现问题的方法是获取错误消息。

在连接

之前添加此行
mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);

并确保您可以看到PHP错误

答案 1 :(得分:0)

试试这个

$sql = "INSERT INTO content_page (name, layout, page_id) VALUES (?,?,?)";
if (!$stmt = $db->prepare($sql)) {
    die($db->error);
}
$stmt->bind_param("ssi", $_POST['name'], $_POST['layout'], $_POST['page_id']);
if (!$stmt->execute()) {
    die($stmt->error);
}
$stmt->close();

或者,如果正如您所说,所有值都是字符串(给定,它们在数据库中定义为varchars /类似的东西),您仍然可以bind_param("sss"...

答案 2 :(得分:-1)

不是 page_id 整数?由于提问者首先将问题标记为 PDO ,因此以下是 PDO 版本:

$stmt = $db->prepare("INSERT INTO content_page (name, layout, page_id) VALUES (:name,:layout,:pid)");
$sth->bindParam(':name', $_POST['name'], PDO::PARAM_STR);
$sth->bindParam(':layout', $_POST['layout'], PDO::PARAM_STR);
$sth->bindParam(':pid', $_POST['page_id'], PDO::PARAM_INT);
$stmt->execute();

或(MySQLi):

$stmt = $db->prepare("INSERT INTO content_page (name, layout, page_id) VALUES (?,?,?)");
$stmt->bind_param("ssi", $_POST['name'], $_POST['layout'], $_POST['page_id']);
$stmt->execute();

或(PDO):

$stmt = $db->prepare("INSERT INTO content_page (name, layout, page_id) VALUES (?,?,?)");
$stmt->execute(array($_POST['name'], $_POST['layout'], $_POST['page_id']));

答案 3 :(得分:-5)

你在这里:

$name = $_POST['layout'];
$layout = $_POST['layout'];
$page_id= $_POST['page_id'];

$stmt = $db->prepare("INSERT INTO content_page (name, layout, page_id) VALUES ('".$name."','".$layout."','".$page_id."')");