>我有以下代码
$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();
}