Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/251.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 抑制PDO警告_Php_Mysql_Pdo_Exception Handling_Suppress Warnings - Fatal编程技术网

Php 抑制PDO警告

Php 抑制PDO警告,php,mysql,pdo,exception-handling,suppress-warnings,Php,Mysql,Pdo,Exception Handling,Suppress Warnings,我试图根据数据库是否可以连接显示服务器状态。有了老式的mysql_connect和mysqli_connect,一切都很简单。我试图保持现代感,所以我使用PDO,但我不知道如何抑制默认警告。据我所知,您需要使用getMessage函数来打印PDO警告,但我没有使用它 这是我的密码: 8 $dbstatus = 1; 9 try { 10 $db = new PDO($dbms . ':host=' . $dbhost . ';port=' . $dbport . ';dbname=' .

我试图根据数据库是否可以连接显示服务器状态。有了老式的mysql_connect和mysqli_connect,一切都很简单。我试图保持现代感,所以我使用PDO,但我不知道如何抑制默认警告。据我所知,您需要使用getMessage函数来打印PDO警告,但我没有使用它

这是我的密码:

8  $dbstatus = 1;
9  try {
10  $db = new PDO($dbms . ':host=' . $dbhost . ';port=' . $dbport . ';dbname=' . $dbname, $dbuser, $dbpasswd);
11  $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
12 } catch(PDOException $e) {
13  $dbstatus = 0;
14 }
15 if($dbstatus == 1) {
16  echo '<span style="color: green">DB Up</span>';
17 } else {
18  echo '<span style="color: red">DB Down</span>';
19  exit;
20 }

谢谢你的帮助,我希望这对其他人有帮助^^

我在这里看到的唯一一件事是,您告诉PDO在尝试打开连接后抛出异常。这很可能太晚了

相反,您可以使用第4个参数将该选项直接发送给构造函数:

try {
  $opts = array(PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION);
  $db = new PDO($dbms . ':host=' . $dbhost . ';port=' . $dbport . ';dbname=' . $dbname,
                $dbuser, $dbpasswd, $opts);
} catch(PDOException $e) {
...
这可能会解决你的问题

编辑:如果主机名由用户提供,则可以在将其发送到PDO构造函数之前对其进行验证

例如,使用:

if (filter_var(gethostbyname($user_provided_host_name), FILTER_VALIDATE_IP)) {
  // valid hostname / ip address
}

这适用于域名、本地主机和ip地址。

更改属性声明并没有阻止加载警告。@AoN奇怪的是,我没有完全测试相同的内容,但我使用google.com的ip地址在这里遇到了异常…:我想我知道它有什么问题了。我通过在地址中间添加一个空间来破坏连接,并且它产生了错误。当我输入正确的域名google.com或IP地址时,它不会产生警告。使用输入错误的localhost或IP会发出警告。这对于一个技术人员来说是很好的,但对于一个只想知道数据库是否正常的用户来说就不那么好了。你知道怎么补偿吗?我在$dbhost变量上尝试了rawurlencode,但对警告没有任何作用:S@AoN为了避免可能出现的问题,您可以验证主机名,请参阅我的编辑。在if语句中包装try-catch时,错误仍然没有更改。在返回json的ajax调用中,警告似乎不可捕获,这使得我最后两天的工作毫无用处。这太糟糕了
if (filter_var(gethostbyname($user_provided_host_name), FILTER_VALIDATE_IP)) {
  // valid hostname / ip address
}