下午好,弄清楚数据库,我决定使用它更合乎逻辑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用户,即使不是程序员,都应该养成阅读错误信息的习惯。并且 - 重要的是 - 阅读整篇文章,而不仅仅是前几个单词。
通常错误消息会详细说明问题所在。
例如,在这种情况下,我们被告知用户正在尝试使用名称 DATABASE_USERNAME 登录,这看起来很不寻常,看起来更像是一个常量名称而不是数据库名称。
我们查看调用代码并确保是 - 出于某种原因引用了常量,结果,传输的不是它的值,而是字面上的 DATABASE_USERNAME 字符串。
如果您删除引号,那么到 PDO 的连接将会成功。
要在 DSN 字符串中使用常量,您必须使用连接:
并再次提醒您,需要在上述常量中写入正确且相关的值 \u200b\u200bin。