0

问题出在 :soundid 上,如果我手动键入从 POST 接收到的 soundid='soundidfromPOST',该行会更新,但使用 soundid=:soundid ... 什么也没有。为什么?

PDO::ATTR_ERRMODE 到 PDO::ERRMODE_EXCEPTION 和 error_reporting 已启用。

public function save($args) {
    $userid = Controller::getUserConnection();
    if ($userid) {
        $soundid = $_POST['soundid'];
        $track_title = $_POST['track_title'];
        $track_artist = $_POST['track_artist'];
        $track_album = $_POST['track_album'];
        $track_genre = $_POST['track_genre'];
        $track_description = $_POST['track_description'];
        $played = 1;
        $statement = $this->_db->prepare("UPDATE sounds SET title=:track_title, artist=:track_artist, album=:track_album, genre_id=:track_genre, description=:track_description, played=:played WHERE soundid=:soundid AND userid=:userid AND ip=:ip");
        $statement->bindParam(':soundid',$soundid,PDO::PARAM_STR);
        $statement->bindParam(':userid',$userid,PDO::PARAM_INT);
        $statement->bindParam(':track_title',$track_title,PDO::PARAM_STR);
        $statement->bindParam(':track_artist',$track_artist,PDO::PARAM_STR);
        $statement->bindParam(':track_album',$track_album,PDO::PARAM_STR);
        $statement->bindParam(':track_genre',$track_genre,PDO::PARAM_INT);
        $statement->bindParam(':track_description',$track_description,PDO::PARAM_STR);
        $statement->bindParam(':ip',$_SERVER['REMOTE_ADDR'],PDO::PARAM_STR);
        $statement->bindParam(':played',$played,PDO::PARAM_INT);
        $statement->execute();
        echo 'saved!';
    }
}
4

1 回答 1

2

我会执行以下操作以使其更清洁,并且因为您不需要显式绑定所有内容(请注意我没有使用所有变量):

将要在查询中使用的所有帖子数据分配给一个数组:

$data = array(
   'userid' => $userid,
   'sounddid' => $_POST['soundid'],
   'track_title' => $_POST['track_title'],
   'track_artist' => $_POST['track_title'],
   'ip' => $_SERVER['REMOTE_ADDR'],
);

写你的查询:

$sth = $this->_db->prepare("
    UPDATE sounds SET 
    title = :track_title, 
    artist = :track_artist
    WHERE soundid = :soundid 
    AND userid = :userid 
    AND ip = :ip
");

传入要执行的数据数组:

$result = $sth->execute($data);
于 2013-05-14T21:37:14.837 回答