gpt4 book ai didi

MYSQL 如果存在则更新,否则插入。几乎可以工作,除了一件事

转载 作者:可可西里 更新时间:2023-11-01 07:59:58 25 4
gpt4 key购买 nike

我正在处理一个 Flex/Php 项目。我已经编写了这个 php 脚本,以便如果艺术家不在数据库中,我将他插入并将 like_score 设置为 1。如果他已经存在,我们通过添加 +1 来更新 like_score。这是我到目前为止所拥有的:

// Variables
$php_artist = $_POST["rma_artist"];


/*
* A simple query to know if the artist exists in the DB by its name. We can't use id since we won't get that value.
* if $numrows > 0, we have a match. We calculate the number of likes and then, we update.
* else, we insert.
*/
$query = "SELECT like_score FROM rma_likelist WHERE like_artist = '$php_artist'";
$result = mysql_query($query);
$row = mysql_fetch_assoc($result);
$numrows = mysql_num_rows($result);

// UPDATE if there is a row that matches, we update
if ($numrows > 0) {
$newLikeScore = $row["like_score"] + 1;
$query = "UPDATE rma_likelist SET like_score = '$newLikeScore' like_artist = $php_artist";

if ( !mysql_query($query, $mysql_connection) ){
die('ERROR: '. mysql_error() );
}

// id, name, likes, operation
$response = $php_artist_id.":::".$php_artist.":::".$newLikeScore.":::MYSQL UPDATE SUCCESSFULL";
}
// INSERT if no rows match, we insert a new record
else {
$query = "INSERT INTO rma_likelist (like_artist, like_score) VALUES ('$php_artist', '1')";

$message = "INSERT SUCCESSFULL, 1 Record Added";

if ( !mysql_query($query, $mysql_connection) ){
die('ERROR: '. mysql_error() );
}

$new_id = mysql_insert_id();

// id, name, likes, operation
$response = $new_id.":::".$php_artist.":::1:::MYSQL INSERT SUCCESSFULL";
}



echo $response;

?>

(或查看 pastebin:http://pastebin.com/HwHYXaGP)

它几乎可以工作:如果一个艺术家还不在数据库中,它会插入它并给它一个 like_score 为 1。它还会识别一个艺术家是否已经在数据库中,因为它不会复制任何艺术家。但是,它永远不会更新数据库中已有乐队的 like_score,它始终保持为 1。为什么会这样?我找了好久 =/

最佳答案

您的代码可能无法正常工作,因为您的 UPDATE 语句不完整:

$query = "UPDATE rma_likelist SET like_score = '$newLikeScore' 
/* missing WHERE keyword */ like_artist = $php_artist";

该语句应包括 ... WHERE like_artist = ...

我原以为你的错误会导致语法错误,我看到你正在检查 mysql_query() 的错误结果,所以我不确定你为什么没有检测到

此外,如果 $php_artist 是一个字符串,则您没有在 UPDATE 语句中引用它。

你还应该小心创建一个 SQL injection漏洞。


也就是说,我建议您可以使用 INSERT... ON DUPLICATE KEY UPDATE 大大简化您的代码.

$query = "INSERT INTO rma_likelist (like_artist, like_score) VALUES (?, 1)
ON DUPLICATE KEY UPDATE like_score = like_score + 1";

$stmt = $pdo->prepare($query);

$stmt->execute( array($php_artist) );

PS:我还会使用带有查询参数的 PDO,如上所示,而不是过时的 ext/mysql。

关于MYSQL 如果存在则更新,否则插入。几乎可以工作,除了一件事,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8548934/

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