使用 Ajax 未更新第二个表

Posted

技术标签:

【中文标题】使用 Ajax 未更新第二个表【英文标题】:Update 2 tables second does not get updated using Ajax 【发布时间】:2016-11-07 11:27:22 【问题描述】:

您好,我在这里遇到了一个非常奇怪的问题。我有 2 个表加入以获取数据。然后在用户编辑数据后,我想分别更新表格。其中一张表得到更新,另一张则没有。

我的代码:

$contact = $_POST['contact'];
    $address = $_POST['address'];
    $company = $_POST['company'];
    $activated = $_POST['activated'];
    $client_id = $_POST['client_id'];
    $level = $_POST['level'];
    $apikey = $_POST['apikey'];
    $phone = $_POST['phone'];


    $update_rest_clients = $handler->prepare("UPDATE rest_api_clients
        SET contact_person = ?, address = ?, company = ?,
            activated = ?, phone_number = ? WHERE client_id = ? ");

    $update_rest_clients->bindValue(1, $contact);
    $update_rest_clients->bindValue(2, $address);
    $update_rest_clients->bindValue(3, $company);

    if ($activated == 'true') 
        $update_rest_clients->bindValue(4, 'yes');
     else 
        $update_rest_clients->bindValue(4, 'no');
    

    $update_rest_clients->bindValue(5, $client_id);
    $update_rest_clients->bindValue(6, $phone);

    $update_rest_clients->execute();
    $update_rest_clients->closeCursor();

    $update_api_key = $handler->prepare("UPDATE rest_api_keys
             SET api_key = ?, level = ? WHERE user_id = ? ");

    $update_api_key->bindValue(1, $apikey);
    $update_api_key->bindValue(2, $level);
    $update_api_key->bindValue(3, $client_id);

    $update_api_key->execute();
    $update_api_key->closeCursor();

    if ($update_api_key) 
        echo "success api key";
     

    if ($update_rest_clients) 
        echo "Success rest client";
    

以及浏览器中的 Ajax 响应:

Array
(
    [contact] => Name Surname
    [address] => Awesome Str. 8
    [company] => mycompany.com
    [apikey] => 09f9bae2fe72975f7da25d284139dc1ee
    [phone] => 00379305557229
    [level] => 10
    [activated] => true
    [client_id] => 3
)
<br />
success api keySuccess rest client

我的 PDO $handler:

try
        $handler = new PDO("mysql:host=".$dbhost.";dbname=".$dbname."", $dbuser, $dbpass);
        $handler->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
        $handler->setAttribute(PDO::MYSQL_ATTR_INIT_COMMAND, "SET NAMES utf8mb4");
        $handler->exec("SET CHARACTER SET utf8mb4");
    catch(Exception $e)
        echo $e->getMessage();
        die();
    

这是第一次查询的错误信息,但我还是不明白为什么表没有更新。

Array ( [0] => 00000 [1] => [2] => ) 

我应该怎么做才能成功?

任何帮助将不胜感激。

【问题讨论】:

if ($activated == 'true') 你在这里检查字符串或布尔值吗?无论哪种方式,请检查可能的错误。 我正在检查一个字符串,因为来自 ajax 的数据字符串是字符串 如果这是 ajax/jquery 相关的,你必须发布你的代码和 html 但是看看浏览器的响应。我已经从 ajax 获取数据并更新了 1 个表。只有 rest_api_clients 没有更新,这很奇怪 您确定这不是 PDO 错误 php.net/manual/en/pdo.errorinfo.php 或 PHP 错误 php.net/manual/en/function.error-reporting.php 吗?我不知道您是否进行了正确的错误检查。 【参考方案1】:

在我看来,您的客户端和电话绑定值是错误的,因此您尝试使用电话号码更新 ID,这意味着如果它以 0 开头,它将失败,因为它永远不会匹配,什么都不会得到更新,但查询仍将执行。见下文:

$update_rest_clients = $handler->prepare("UPDATE rest_api_clients SET contact_person = ?, address = ?, company = ?, activated = ?, phone_number = ? WHERE client_id = ? ");

$update_rest_clients->bindValue(1, $contact);
$update_rest_clients->bindValue(2, $address);
$update_rest_clients->bindValue(3, $company);

if ($activated == 'true') 
    $update_rest_clients->bindValue(4, 'yes');
 else 
    $update_rest_clients->bindValue(4, 'no');


//I have swapped these around.
$update_rest_clients->bindValue(6, $client_id);
$update_rest_clients->bindValue(5, $phone);

【讨论】:

你能相信吗?我真傻。我会在 22 小时内奖励赏金【参考方案2】:

在 MySQl 5.7 中级别是 reserved word

对字段名称使用反引号`

【讨论】:

我在另一张桌子上有问题。水平更新良好的表

以上是关于使用 Ajax 未更新第二个表的主要内容,如果未能解决你的问题,请参考以下文章

插件未在激活时创建第二个表

在更新前使用触发器将一行插入到我的第二个表中

Oracle - 使用第二个表中的行更新第一个表中的数据

sql 从表中选择未出现在第二个表中的所有内容

根据第二个表中的条件更新表

Laravel 5.2 迁移第二个表时出现数据库迁移错误