用于更新或插入值的PHP代码

时间:2013-11-21 03:00:23

标签: php mysql api

我正在尝试使用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;
 ?>

3 个答案:

答案 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