【问题标题】:Prevent Mysql from overwriting data防止Mysql覆盖数据
【发布时间】:2014-10-11 16:00:17
【问题描述】:

我正在尝试向purchased 列中的现有字符串添加更多数据(加入)

我使用这个 PHP 代码:

 $id=$_GET["id"];    
 $username=$_SESSION['username'];
 $sql="UPDATE `users` SET `purchased` = `purchased`.' $id' WHERE `username`='$username'";
 mysql_query($sql);

如果当前用户的 purchased 列包含值 0 则在此查询 (id=1) 之后它应该变为

0 1 但它会覆盖现有数据并成为1 我如何将这个(space)1 加入我的Mysql 列中现有的0 而不会覆盖任何内容,只需加入现有字符串

【问题讨论】:

    标签: php html mysql sql web


    【解决方案1】:

    通过获取现有值并在 PHP 中加入字符串来解决

    $id = $_GET["id"];    
    $username = $_SESSION['username'];
    $sql = "SELECT `purchased` FROM `users` WHERE `username` = '".$_SESSION['username']."'";
    $data = mysql_query($sql);
    while($row = mysql_fetch_row($data)) {
        $ep = $row[0];
    }
    $newData = ''.$ep.' '.$id.'';
    $sql="UPDATE `users` SET `purchased` = '$newData' WHERE `username`='$username'";
    mysql_query($sql);
    

    【讨论】:

    • 请在核心 PHP 编程中始终使用PEAR 编码标准。
    【解决方案2】:

    这就是答案:

    $id = $_GET["id"];    
    $username = $_SESSION['username'];
    try {
        $dbh = new PDO('mysql:host=localhost;dbname=myDatabase', $username, $password);
        $sth = $dbh->prepare('UPDATE `users` SET `purchased` = CONCAT(`purchased`,?) WHERE `username`=?');
        $sth->bindParam(1, $id, PDO::PARAM_INT);
        $sth->bindParam(2, $username, PDO::PARAM_STR);
        $sth->execute();
    } catch(PDOException $e) {
        echo 'ERROR: ' . $e->getMessage();
    }
    

    【讨论】:

    • 请在核心 PHP 编程中始终使用PEAR 编码标准。
    猜你喜欢
    • 2019-04-03
    • 1970-01-01
    • 1970-01-01
    • 2017-05-29
    • 1970-01-01
    • 1970-01-01
    • 2018-06-27
    • 2019-12-03
    • 1970-01-01
    相关资源
    最近更新 更多