我正在尝试用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;
?>
错误是因为$results
为null/false,这可能是由于SQL执行失败。
假设您的$dbc->query($sql)
是mysqli_query()的包装器,则函数将在查询失败时返回false
。要调试此行为,可以使用var_dump($results)
。
在更新查询中,我要查找的条件的一部分是NOW(),它永远找不到。所以我把它移到了查询的更新部分,而不是条件区域。
使用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