RError.com

RError.com Logo RError.com Logo

RError.com Navigation

  • 主页

Mobile menu

Close
  • 主页
  • 系统&网络
    • 热门问题
    • 最新问题
    • 标签
  • Ubuntu
    • 热门问题
    • 最新问题
    • 标签
  • 帮助
主页 / 问题 / 561603
Accepted
Егор Rmd
Егор Rmd
Asked:2020-09-01 06:00:23 +0000 UTC2020-09-01 06:00:23 +0000 UTC 2020-09-01 06:00:23 +0000 UTC

切换到 pdo 的正确方法是什么,致命错误:未捕获的异常?

  • 772

下午好,弄清楚数据库,我决定使用它更合乎逻辑pdo,我想将我的简单授权表单从转移mysqli到pdomysqli

联系 :

  require 'app_config.php';

  //$mysql=mysqli_connect(DATABASE_HOST, DATABASE_USERNAME, DATABASE_PASSWORD) or die("<p>Ошибка к подключению БД :" .
  //    mysqli_error($mysql) . "</p>");
  //mysqli_select_db($mysql, DATABASE_NAME) or die("<p>Ошибка при выборе БД</p>" . mysqli_error($mysql) );
  //Через pdo DATABASE HANDLE

  //$DBH = new PDO("mysql:host=DATABASE_HOST;dbname=DATABASE_USERNAME", DATABASE_NAME,DATABASE_PASSWORD);
  $DBH = new PDO('mysql:dbname=ch33404_testdb;host=localhost', 'DATABASE_USERNAME', 'DATABASE_PASSWORD');
  $DBH - > setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

这就是它给出更多错误的方式,我不明白为什么:

//$DBH = new PDO("mysql:host=DATABASE_HOST;dbname=DATABASE_USERNAME", DATABASE_NAME,DATABASE_PASSWORD);

本质:有一个带有字段的简单 stml 表单,create_user.php 脚本应该可以工作并将用户写入数据库,现在单击“登录”后会发生这样的错误


致命错误:在 /home/c/ch33404/testsite/public_html/test/ 中未捕获异常“PDOException”,消息为“SQLSTATE[HY000] [1045] 拒绝用户'DATABASE_USERNAME'@'localhost'(使用密码:YES)'的访问scripts/database_connection.php:15 堆栈跟踪:#0 /home/c/ch33404/testsite/public_html/test/scripts/database_connection.php(15): PDO->__construct('mysql:dbname=ch...', 'DATABASE_USERNA...', 'DATABASE_PASSWO...') #1 /home/c/ch33404/testsite/public_html/test/scripts/create_user.php(3): require('/home/c/ch33404... ') #2 {main} 在第 15 行的 /home/c/ch33404/testsite/public_html/test/scripts/database_connection.php 中抛出


这是 create_user.php 脚本本身:

<?php require'database_connection.php';
 $first_name=trim($_REQUEST['first_name']);
 $last_name=trim($_REQUEST['last_name']);
 $email=trim($_REQUEST['email']);
 $bio=trim($_REQUEST['bio']);
 $vkontakte_url=str_replace("vk.com",
"vkontakte.com",
trim($_REQUEST['vkontakte_url']));
 $position=strpos($vkontakte_url,
"vk.com");
 if ($position===false) {
  $vkontakte_url="http://www.vk.com/" . $vkontakte_url;
}
$twitter_handle=trim($_REQUEST['twitter_handle']);
 $twitter_url="http://www.twitter.com/";
 $position=strpos($twitter_handle,
"@");
 if ($position===false) {
  $twitter_url=$twitter_url . $twitter_handle;
}
else {
  $twitter_url=$twitter_url . substr($twitter_handle, $position + 1);
}
////через mysqli
//$insert_sql = "INSERT INTO users (first_name, last_name, email, bio, vkontakte_url, twitter_handle) " . "VALUES ('{$first_name}', '{$last_name}', '{$email}', '{$bio}' " .
//                      "'{$vkontakte_url}', '{$twitter_handle}');";
//
//Добавить пользователя  в базу данных
//mysqli_query($mysql,$insert_sql) or die(mysqli_error($mysql));
//Вставка данных через PDO
$STH=$DBH->prepare("INSERT INTO users ( first_name, last_name,email, bio, vkontakte_url, twitter_handle) values ( '{$first_name}', '{$last_name}', '{$email}', '{$bio}', '{$vkontakte_url}', '{$twitter_handle}' )");
 $STH->execute();
//Отправляем пользователя на свой профиль
//header("Location: show_user.php?user_id=" . mysqli_insert_id($mysql));

第 10 行 connection.php 是:

$DBH = new PDO('mysql:dbname=ch33404_testdb;host=localhost', 'DATABASE_USERNAME', 'DATABASE_PASSWORD');

php
  • 1 1 个回答
  • 10 Views

1 个回答

  • Voted
  1. Best Answer
    Ипатьев
    2020-09-05T23:45:44Z2020-09-05T23:45:44Z

    每个php用户,即使不是程序员,都应该养成阅读错误信息的习惯。并且 - 重要的是 - 阅读整篇文章,而不仅仅是前几个单词。

    通常错误消息会详细说明问题所在。

    例如,在这种情况下,我们被告知用户正在尝试使用名称 DATABASE_USERNAME 登录,这看起来很不寻常,看起来更像是一个常量名称而不是数据库名称。

    我们查看调用代码并确保是 - 出于某种原因引用了常量,结果,传输的不是它的值,而是字面上的 DATABASE_USERNAME 字符串。

    如果您删除引号,那么到 PDO 的连接将会成功。

    要在 DSN 字符串中使用常量,您必须使用连接:

    $dsn = 'mysql:dbname='.DATABASE_NAME.';host='.DATABASE_HOST
    

    并再次提醒您,需要在上述常量中写入正确且相关的值 \u200b\u200bin。

    • 2

相关问题

Sidebar

Stats

  • 问题 10021
  • Answers 30001
  • 最佳答案 8000
  • 用户 6900
  • 常问
  • 回答
  • Marko Smith

    如何停止编写糟糕的代码?

    • 3 个回答
  • Marko Smith

    onCreateView 方法重构

    • 1 个回答
  • Marko Smith

    通用还是非通用

    • 2 个回答
  • Marko Smith

    如何访问 jQuery 中的列

    • 1 个回答
  • Marko Smith

    *.tga 文件的组重命名(3620 个)

    • 1 个回答
  • Marko Smith

    内存分配列表C#

    • 1 个回答
  • Marko Smith

    常规赛适度贪婪

    • 1 个回答
  • Marko Smith

    如何制作自己的自动完成/自动更正?

    • 1 个回答
  • Marko Smith

    选择斐波那契数列

    • 2 个回答
  • Marko Smith

    所有 API 版本中的通用权限代码

    • 2 个回答
  • Martin Hope
    jfs *(星号)和 ** 双星号在 Python 中是什么意思? 2020-11-23 05:07:40 +0000 UTC
  • Martin Hope
    hwak 哪个孩子调用了父母的静态方法?还是不可能完成的任务? 2020-11-18 16:30:55 +0000 UTC
  • Martin Hope
    Qwertiy 并变成3个无穷大 2020-11-06 07:15:57 +0000 UTC
  • Martin Hope
    koks_rs 什么是样板代码? 2020-10-27 15:43:19 +0000 UTC
  • Martin Hope
    user207618 Codegolf——组合选择算法的实现 2020-10-23 18:46:29 +0000 UTC
  • Martin Hope
    Sirop4ik 向 git 提交发布的正确方法是什么? 2020-10-05 00:02:00 +0000 UTC
  • Martin Hope
    Arch ArrayList 与 LinkedList 的区别? 2020-09-20 02:42:49 +0000 UTC
  • Martin Hope
    iluxa1810 哪个更正确使用:if () 或 try-catch? 2020-08-23 18:56:13 +0000 UTC
  • Martin Hope
    faoxis 为什么在这么多示例中函数都称为 foo? 2020-08-15 04:42:49 +0000 UTC
  • Martin Hope
    Pavel Mayorov 如何从事件或回调函数中返回值?或者至少等他们完成。 2020-08-11 16:49:28 +0000 UTC

热门标签

javascript python java php c# c++ html android jquery mysql

Explore

  • 主页
  • 问题
    • 热门问题
    • 最新问题
  • 标签
  • 帮助

Footer

RError.com

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

帮助

© 2023 RError.com All Rights Reserve   沪ICP备12040472号-5