首页 > 解决方案 > Mysql不更新数据库

问题描述

似乎无法让数据库更新。没有返回错误,所有变量都被传递到函数中,我已经搜索了几个小时甚至几天。奇怪的是,我有另一个函数使用与此函数中相同的代码工作正常......

    public function updateCustomer($uname, $umail, $ushipping, $uchargeID, $udate, $ID)
{
    try {
        $dbhost = 'host';
        $dbuser = 'app';
        $db_name = 'order';
        $dbpass = '';
        $conn1 = mysql_connect($dbhost, $dbuser, $dbpass);
        $sql1 = "UPDATE customers
                  SET name = $uname, email = $umail, shipping = $ushipping, shipped = 'NO', charge_ID = $uchargeID, date = $udate
                  WHERE ID = $ID";
        mysql_select_db('orders');

        mysql_query($sql1);
        return ;

    } catch (PDOException $e) {
        echo $e->getMessage();
    }
}

标签: phpmysql

解决方案


正如我在上面的评论中提到的,mysql_query()不会抛出任何异常。您应该检查它的返回值,如果为 false,则回显mysql_error()。您最有可能遇到的问题是因为您的所有变量都没有在数据库中被转义。这是无效的语法:

UPDATE customers SET name = example_username

你要这个:

UPDATE customers SET name = 'example_username'

你最好只告诉 MySQL 你想要变量的位置,然后让 MySQL 使用准备好的语句来发挥作用。可以在这里找到一个例子:

public function updateCustomer($uname, $umail, $ushipping, $uchargeID, $udate, $ID)
{
    try {
        $dbhost = 'host';
        $dbuser = 'app';
        $db_name = 'order';
        $dbpass = '';
        $db = new PDO("mysql:host={$dbhost};dbname={$db_name}", $dbuser, $dbpass);
        $sql1 = "UPDATE customers
                  SET name = :uname, email = :umail, shipping = :ushipping, shipped = 'NO', charge_ID = :ucharge_id, date = :udate
                  WHERE ID = :id";

        $stmt = $db->prepare($sql1);

        $res = $stmt->execute([
          'uname' => $uname,
          'umail' => $umail,
          'ushipping' => $ushipping,
          'ucharge_id' => $uchargeID,
          'udate' => $udate,
          'id' => $ID
        ]);
        return;

    } catch (PDOException $e) {
        echo $e->getMessage();
    }
}

推荐阅读