MySQL 使用 Bind_Param 和 ON DUPLICATE KEY

MySQL using Bind_Param and ON DUPLICATE KEY

我有一个名为 test_favorites 的 table,用户可以在其中将内容添加到收藏夹。我用这个 SQL-function, 但出现此错误:

call to a member function bind_param() on boolean in line (bind_param-line)

$sql = $conn->prepare("INSERT INTO `test_favorites` (`What`, `OId`, `UserId`) VALUES (?,?,?) ON DUPLICATE KEY UPDATE Values(`Value`)=Values(`Value`)*(-1);");
$sql->bind_param('sis',$posttype, $postid  , $sessionuserid);

不知道解决错误是否解决了我的问题。因为在我的 table test_favorites 中,列 WhatOIdUserId 是唯一的。在 Value 列中,我已将默认值分配给 1。但我正在尝试创建一个 SQL,它正在检查 WhatOIdUserId已经存在,如果存在,则脚本应将 value 中的值乘以 (-1)。所以这样 Value 在 1 和 -1 之间切换。如果它不存在,那么默认值应该打印在列 value 中。

我写的 SQL 句子错了吗?

编辑 在 som starthelp 之后我现在使用这个代码:

$sql = $conn->prepare("INSERT INTO `test_favorites` (`What`, `OId`, `UserId`, `Value`) VALUES (?,?,?,?) ON DUPLICATE KEY UPDATE Value=values(Value)*(-1);");
$sql->bind_param('sisi',$posttype, $postid,$sessionuserid,$one);

我似乎更接近了,但它仍然没有更新,只是在 table.

中添加了一个新行

嗯,ON DUPLICATE KEY UPDATE 的有效语法是

INSERT INTO `test_favorites` (`What`, `OId`, `UserId`) VALUES (?,?,?) ON DUPLICATE KEY UPDATE userId = values(userId) * -1, anyotherfield = values(What) + values(OId);

因此在您的情况下 - 您可以更新 table 中的任何字段,但可以对您实际插入的三个字段使用值 SQL 函数