使用 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 未更新第二个表的主要内容,如果未能解决你的问题,请参考以下文章