gpt4 book ai didi

php - sql BEGIN 创建错误

转载 作者:行者123 更新时间:2023-11-29 18:25:35 25 4
gpt4 key购买 nike

我正在尝试根据行是否已存在来更新我的数据库。

在我的 php 文件中,我创建了这个字符串:

 IF EXISTS(SELECT updown
FROM voted_source
WHERE ID = ? AND userID = ?)
BEGIN
UPDATE voted_source
SET updown = TRUE
WHERE ID = ?;

UPDATE source
SET score_up = score_up + 1,
score_down = score_down - 1
WHERE ID = ?;
END;
ELSE
BEGIN
INSERT INTO voted_source (ID, userID, updown)
VALUES (?, ?, TRUE);

UPDATE source
SET score_up = score_up + 1,
score_down = score_down - 1
WHERE ID = ?;
END

我使用 pdo 来调用它,如下所示:

$pdo = new PDO('mysql: host='.$servername.';dbname='.$db, $user, $pass, array(
PDO::ATTR_PERSISTENT => true
));
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

$pdo->beginTransaction();

$stmt = $pdo->prepare($sqlString);
$stmt->execute([$sourceID, $userID, $sourceID, $sourceID, $sourceID, $userID, $sourceID ]);

$pdo->commit();

$pdo = null;

这会返回错误:

Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'BEGIN UPDATE voted_source SET updown = TRUE WHERE ID = '1'at line 4' in voteSource.php:74 Stack trace: #0 voteSource.php(74): PDOStatement->execute(Array) #1 {main} thrown in voteSource.php on line 74;

用户有权选择插入和更新。非常感谢任何帮助。

最佳答案

看起来您已经从某处找到的存储过程示例中复制并粘贴了代码,然后根据您的需要进行了更改。来自 MySQL 手册的“13.6.1 BEGIN ... END 复合语句语法”部分 ( see here ):

BEGIN ... END syntax is used for writing compound statements, which can appear within stored programs (stored procedures and functions, triggers, and events). [...]

我的理解是,BEGIN ... END 不能在普通查询中使用,但只能在存储过程中使用以及函数、触发器和事件;因此出现错误消息。根据您的情况,您不需要它们,因此请将它们保留。

此外,来自 MySQL 手册的“13.6.5.2 IF 语法”部分 ( see here ):

IF search_condition THEN statement_list
   [ELSEIF search_condition THEN statement_list] ...
   [ELSE statement_list]
END IF

因此,您确实应该在 $sqlString 末尾的新行中添加 END IF

关于php - sql BEGIN 创建错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46226824/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com