我正在尝试使用php编写一个API来检查用户输入的值,如果trackid和userid已经在数据库中,它将更新评级。但是,如果跟踪和用户ID不存在,则API应将其与评级一起插入。如何才能做到这一点。请注意我一直收到错误:
在非对象
上调用成员函数rowCount()
第14行。任何帮助将不胜感激。
<?php
$id = $_GET['TrackId'];
$user = $_GET['UserId'];
$rating = $_GET['Rating'];
include("connect.php");
$query = "UPDATE `rating` SET `rating` = '$rating' WHERE track_id = '$id' AND user_id = '$user' AND rating_set=NOW()";
$sth = $dbc->query($query);
$rows = $sth->rowCount();
if ($rows != 2) {
$query = "INSERT INTO `rating` values ('$id','$rating','$user',NOW())";
$results = $dbc->query($query);
$rows = $results->rowCount();
header('Content-type: application/json; charset=utf-8');
echo $_GET['onJSONPLoad'];
echo "(" . json_encode($rows) . ")";
}
else
{
header('Content-type: application/json; charset=utf-8');
echo $_GET['onJSONPLoad'];
echo "(" . json_encode($rows) . ")";
}
$dbc = null;
?>
答案 0 :(得分:0)
错误是因为您的$results
为null / false,这可能是由于SQL执行失败所致。
假设您的$dbc->query($sql)
是mysqli_query()的包装器,该函数将在失败的查询中返回false
。要调试此行为,您可以var_dump($results)
。
答案 1 :(得分:0)
在我正在寻找的条件的更新查询部分是NOW(),它永远不会被找到。所以我将它移动到查询的更新部分而不是条件区域。
答案 2 :(得分:0)
使用ON DUPLICATE KEY子句
INSERT INTO table (column1, ... )
VALUES (’value1’, ...)
ON DUPLICATE KEY
UPDATE column2 = =value2, ...
http://dev.mysql.com/doc/refman/5.0/en/insert-on-duplicate.html