PHP + MySQL SQL 语法错误


PHP + MySQL SQL Syntax error

>我有以下代码

$id_post = mysql_real_escape_string($_POST['id']);
$forumid = (int)mysql_real_escape_string($_POST['forumid']);
$message = mysql_real_escape_string($_POST['message']);
mysql_query("UPDATE forum_reactions SET message = ".$message." WHERE id = ".$id_post." ");

消息是文本列

它给出了这个错误

您的 SQL 语法有误;请查看手册 对应于您的MariaDB服务器版本,以便使用正确的语法 在第 1 行的"staat niet in het woordfilter lol WHERE id = 39"附近

你没有包含$message的字符串,所以SQL试图将它们用作关键字,但它们不是。试试这个:

$id_post = mysql_real_escape_string($_POST['id']);
$forumid = (int)mysql_real_escape_string($_POST['forumid']);
$message = mysql_real_escape_string($_POST['message']);
mysql_query("UPDATE forum_reactions SET message = '".$message."' WHERE id = ".$id_post." ");

mysql_* 函数已弃用,您应该迁移到 mysqli_* 或 PDO。

http://php.net/manual/en/function.mysql-query.php

此扩展从 PHP 5.5.0 开始已弃用,并将在 未来。相反,应该使用 MySQLi 或 PDO_MySQL 扩展。 另请参阅 MySQL:选择 API 指南和相关常见问题解答以获取更多信息 信息。此功能的替代方法包括:

mysqli_query() PDO::查询()

PDO示例用法:

<?php
try {
    // config
    $dsn = 'mysql:dbname=testdb;host=127.0.0.1;charset=utf8';
    $username = 'root';
    $password = '';
    $options = array(
        PDO::MYSQL_ATTR_USE_BUFFERED_QUERY => true,
        PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
        PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
    ); // You should always use these options
    // conncect
    $pdo = new PDO($dsn, $username, $password, $options);
    // check posted values
    if (
        !isset($_POST['id'], $_POST['message']) ||
        !is_string($_POST['id']) ||
        !is_string($_POST['message'])
    ) {
        throw new RuntimeException('invalid parameters');
    }
    // SQL execution
    $stmt = $pdo->prepare('UPDATE forum_reactions SET message = ? WHERE id = ?');
    $stmt->execute(array($_POST['message'], $_POST['id']));
    // check result
    if ($stmt->rowCount()) {
        echo 'successfully updated';
    } else {
        echo 'specified ID not found.';
    }
} catch (Exception $e) {
    echo $e->getMessage();
}