在 AJAX 查询之后使用 jQuery 解释 PDO 错误
Posted
技术标签:
【中文标题】在 AJAX 查询之后使用 jQuery 解释 PDO 错误【英文标题】:Interpret PDO errors with jQuery after an AJAX query 【发布时间】:2014-04-01 10:30:24 【问题描述】:我正在为我当前的项目编写一个小安装脚本。该脚本的第一个“步骤”要求用户提供他的 mysql 凭据并对其进行测试。一切都是通过使用 jQuery 的 $.ajax 的 AJAX 查询完成的。
我的客户端脚本如下所示:
<section class="col-md-6" style="display: none;" id="pane2">
<h1 style="text-align: center;">MySQL Setup</h1>
<form method="POST" action="stuff.php" role="form" class="installform">
<input type="text" class="form-control" placeholder="Host" name="host" id="host">
<input type="text" class="form-control" placeholder="Database Name" name="dbname" id="dbname">
<input type="text" class="form-control" placeholder="Username" name="sqlusername" id="sqlusername">
<input type="password" class="form-control" placeholder="Password" name="sqlpassword" id="sqlpassword">
</form>
<a><button class="btn btn-primary btn-lg btn-block" id="sqlbutton">Next</button></a>
<script>
$(function()
$('#sqlbutton').click(function()
var host = $('#host').val();
var dbname = $('#dbname').val();
var username = $('#sqlusername').val();
var password = $('#sqlpassword').val();
var credentials = "host=" + host + "&dbname=" + dbname + "&username=" + username + "&password=" + password;
$.ajax(
type: "POST",
url: "sqlchecker.php",
data: credentials,
success: function(data)
if (data == 'success')
$('#sqlbutton').html("All right.");
else
$('#sqlbutton').html("Something is wrong");
);
);
);
</script>
而我的 sqlchecker.php 脚本目前是这样的:
<?php
$host = $_POST['host'];
$dbname = $_POST['dbname'];
$username = $_POST['username'];
$password = $_POST['password'];
$options = array(PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES utf8');
// Opens a connection to the database using PDO
try
$db = new PDO("mysql:host=$host;dbname=$dbname;charset=utf8", $username, $password, $options);
catch(PDOException $ex)
die("Couldn't connect to the database. Error code: " . $ex->getMessage());
echo('success');
?>
当然,目前,它绝对不区分错误,如果没有,它会显示“好的”。如果有,则显示“有问题”。但我希望它更具体一点,并告诉用户查询中到底出了什么问题。
我正在寻找一种“解析” PDO 异常,问题是它们返回了一个几乎不可能在 if 语句中使用的完整句子。有没有办法在连接上配置 PDO,所以它只返回一个错误代码,使用 jQuery 更容易解释?
非常感谢您的回答!
【问题讨论】:
我个人建议使用 json (json_encode) 返回信息以供使用。您可以发送一个名为“error”的参数,0 表示没有错误,任何其他值都表示错误。您可以传递错误描述。 感谢您的回答@galchen!那么解释 PDO 错误代码的 PHP 代码会是什么样子呢?我的意思是如果例如 0 表示“无错误”,1 表示“错误的用户名”等,我如何解释 PHP 中的 PDO 异常以将它们“转换”为这些数字? $ex->getMessage() 怎么样? 好吧 getMessage() 输出一个完整的句子,但我只想获取错误代码本身。 Steve B 在他的回答中建议我使用 getCode() 但它输出的字符串与 getMessage() 完全相同... 【参考方案1】:在异常上调用 getCode 应该会为您提供可以使用的代码。然后,您可以打开它并给您的用户一些适当的反馈。这肯定比试图操纵返回的字符串消息更干净。
$errorCode = $ex->getCode();
switch($errorCode)
case 1000:
//...
break;
default:
//...
break;
对于我的sql,我相信错误代码会列在这里:
https://dev.mysql.com/doc/refman/5.0/en/error-messages-server.html
【讨论】:
非常感谢,这正是我想要的! 抱歉,您的代码不起作用,当我回显 $errorcode 时,它给了我与 $ex->getMessage() 完全相同的句子。 你确定吗?我在这里检查过,对于 PDOExceptions,我在调用 getCode() 时会得到一个数字。这也是手册所说的:uk1.php.net/PDOException 是的,我 100% 确定。仔细检查我的代码,当我在输入错误的用户名后回显 $errorcode 时,它输出以下字符串而不是错误代码:“无法连接到数据库。错误代码:SQLSTATE [28000] [1045] 用户拒绝访问'grrggrg'@'localhost'(使用密码:YES)"。 问题已解决。我忘记删除“die(”无法连接到数据库。错误代码:“。$ex->getMessage());”在写这段代码之前......现在我感觉很愚蠢哈哈。以上是关于在 AJAX 查询之后使用 jQuery 解释 PDO 错误的主要内容,如果未能解决你的问题,请参考以下文章