Php MySQL没有执行更新

Php MySQL没有执行更新,php,jquery,mysql,ajax,Php,Jquery,Mysql,Ajax,我试图提交一个AJAX请求来更新MySQL数据库中的一行。每当我试图通过AJAX提交请求时,该行不会更新,但每当我直接在数据库中测试查询和参数值时,该行就会更新 这就是标记和AJAX的外观: $('body').on('change','cb_employ',function(){ var checked=此项已检查; var business_id=$(this.attr('data-id'); var jqxhr=$.post(“php/update_emption.php”{ 豁免:勾选

我试图提交一个AJAX请求来更新MySQL数据库中的一行。每当我试图通过AJAX提交请求时,该行不会更新,但每当我直接在数据库中测试查询和参数值时,该行就会更新

这就是标记和AJAX的外观:

$('body').on('change','cb_employ',function(){
var checked=此项已检查;
var business_id=$(this.attr('data-id');
var jqxhr=$.post(“php/update_emption.php”{
豁免:勾选,
business\u id:business\u id
})
.完成(功能(数据){
警报(“业务已成功更新”);
})
.fail(函数(jqXHR、textStatus、errorshown){
警报(错误抛出);
});
});

名称
活跃的
免收帐单
计费历史记录
[删除]

通常,您应该仅对数组使用empty。
在您的情况下,使用
strlen($\u POST['empt'])>0
而不是
empty($\u POST['empty])

通常,您应该仅对数组使用empty。
在您的情况下,使用
strlen($\u POST['empt'])>0
而不是
empty($\u POST['empture])

您是否检查了mysql查询日志以确保执行的查询是什么

您可以通过查询查看sql日志文件:

show variables like '%log%';
您可以通过执行以下命令来启用sql日志:

set global general_log=1;
可以通过以下方式设置日志文件:

set-global-general_-log_-file='/var/log/mysql/mysql.log'


请检查sql日志一次。

您是否检查了mysql查询日志以确保执行的查询是什么

您可以通过查询查看sql日志文件:

show variables like '%log%';
您可以通过执行以下命令来启用sql日志:

set global general_log=1;
可以通过以下方式设置日志文件:

set-global-general_-log_-file='/var/log/mysql/mysql.log'


请检查一下sql日志。

我能够解决我的问题,它必须处理PHP是一种松散类型的语言。为了解决这个问题,我使用了
bindValue
通过使用
boolval
intval
显式转换$\u POST值,然后还指定了PDO参数类型:

// Update the business' exempt status
$stmt = $db->prepare('UPDATE IGNORE `business` SET `is_exempt` = :exempt WHERE `business_id` = :business_id;');

// Add the parameters
$stmt->bindValue(':exempt',      boolval($_POST['exempt']),     PDO::PARAM_INT);
$stmt->bindValue(':business_id', intval($_POST['business_id']), PDO::PARAM_INT);

// Execute the query passing the new exempt value and the business_id
$stmt->execute();
如果没有Abhishek Sharma的建议,即检查SQL的常规日志,并认识到SQL实际上传递的是字符串值而不是整数值,我就不会明白这一点:

Execute UPDATE IGNORE `business` SET `is_exempt` = 'true' WHERE `business_id` = '1'
更新


实际上,
boolval
不起作用。我必须使用这个解决方案来转换
$\u POST
值:

我能够解决我的问题,它必须处理PHP是一种松散类型的语言。为了解决这个问题,我使用了
bindValue
通过使用
boolval
intval
显式转换$\u POST值,然后还指定了PDO参数类型:

// Update the business' exempt status
$stmt = $db->prepare('UPDATE IGNORE `business` SET `is_exempt` = :exempt WHERE `business_id` = :business_id;');

// Add the parameters
$stmt->bindValue(':exempt',      boolval($_POST['exempt']),     PDO::PARAM_INT);
$stmt->bindValue(':business_id', intval($_POST['business_id']), PDO::PARAM_INT);

// Execute the query passing the new exempt value and the business_id
$stmt->execute();
如果没有Abhishek Sharma的建议,即检查SQL的常规日志,并认识到SQL实际上传递的是字符串值而不是整数值,我就不会明白这一点:

Execute UPDATE IGNORE `business` SET `is_exempt` = 'true' WHERE `business_id` = '1'
更新


实际上,
boolval
不起作用。我不得不使用这个解决方案来转换
$\u POST
值:

看看你的开发人员控制台,看看那里显示了什么。@FunkFortyNiner-控制台中没有显示任何内容。有两个日志需要检查:JavaScript(控制台)和PHP服务器端,在那里可能出现任何问题。在深入挖掘之前,请验证您是否正确接收了参数,以及您期望的名称。验证
$.post
调用是否正确启动,是否确实发出了请求,并且没有收到500类型错误。这些不会总是显示在控制台中,但会显示在网络活动检查器中。@tadman-从
print\r($\u POST)
和网络>POST>参数返回的名称和值与预期一致。JavaScript控制台和xampp>apache>日志中的error.txt文件中均未显示任何内容。POST请求返回状态为200.Btw;我注意到它有一个复选框和一个条件。不要使用
empty()
对于这些,请使用
isset()
。然后查看您的开发人员控制台,看看其中显示了什么。@FunkFortyner-控制台中没有显示任何内容。有两个日志需要检查:JavaScript(控制台)和PHP服务器端,其中可能出现任何问题。在深入挖掘之前,请验证您是否正确接收了参数,以及您期望的名称。验证
$.post
调用是否正确启动,是否确实发出了请求,并且没有收到500类型错误。这些不会总是显示在控制台中,但会显示在网络活动检查器中。@tadman-从
print\r($\u POST)
和网络>POST>参数返回的名称和值与预期一致。JavaScript控制台和xampp>apache>日志中的error.txt文件中均未显示任何内容。POST请求返回状态为200.Btw;我注意到它有一个复选框和一个条件。不要使用
empty()
对于这些,请使用
isset()
。这并不能解决问题。POST请求运行时也会发生同样的情况,但查询不会执行。即使这是问题所在,Else语句也会引发异常,从而触发POST请求的失败回调。请尝试打印db对象。我在Try/Catch之后使用了以下代码:
var\u dump($db);打印($db->errorInfo())返回以下内容:
对象(PDO)#1(0){}数组([0]=>00000[1]=>[2]=>)
这并不能解决问题。POST请求运行时也会发生同样的情况,但查询不会执行。即使这是问题所在,Else语句也会引发异常,从而触发POST请求的失败回调。请尝试打印db对象。我在Try/Catch之后使用了以下代码:
var\u dump($db);打印($db->errorInfo())object(PDO)#1(0){}数组(