脚本未正确发送登录信息
Posted
技术标签:
【中文标题】脚本未正确发送登录信息【英文标题】:Script isn't sending login information correctly 【发布时间】:2013-05-27 00:12:10 【问题描述】:大约一个小时前,我刚刚开始编写自己的脚本,但遇到了一个我不确定如何修复的错误,似乎除了用户名之外的所有内容都正确解析,由于某种原因,当我执行时我的 php 表创建脚本它没有从 config.php 解析用户名,而是在没有用户名的情况下执行脚本。
我将代码放在 phpcodechecker.com/ 上,但它什么也没给我,甚至没有任何警告,这让我很困惑,代码对我来说看起来不错,但我对此很陌生,所以我可能错过了一些巨大的东西,任何帮助将不胜感激。
为什么这段代码在尝试连接时没有将用户名解析到createtable.php??
有问题的代码sn-ps; 堆栈格式化代码块的方式让我很困惑,所以我将只使用 pastebin
config.php
createtable.php
【问题讨论】:
如果您在 config.php 中连接,为什么要在 createtable.php 中重新连接? 你提出了一个很好的观点,删除了它,但它仍然输出 Unable to select the defined database: Access denied for user ''@'localhost' to database 'testdb' 这告诉我它仍然未能将用户名root发送到数据库,我不明白为什么 看看法比奥的回答,应该能解决问题。 【参考方案1】:这是因为您在config.php
中混合了mysqli
和mysql
api,最终根本没有连接
mysqli_connect($db_hostname, $db_username, $db_password)
mysql_select_db($db_database)
要使用 mysqli 扩展与数据库的正确连接(这显然更好用,因为不推荐使用 mysql_*
函数),请执行以下操作:
$mysqli = new mysqli('localhost', 'fake_user', 'my_password', 'my_db');
if ($mysqli->connect_errno)
die('Connect Error: ' . $mysqli->connect_errno);
您可以查看documentation here
我想补充一点,您可以在任何需要它的脚本中使用来自config.php
的连接。
require('config.php');
所以你的creatables.php
看起来像这样
require("config.php");
$sql="CREATE TABLE quoter (
id int NOT NULL AUTO_INCREMENT,
quote text NOT NULL,
quoteby CHAR(50) NOT NULL,
PIMARY KEY (id)
)";
if (mysqli_query($mysqli,$sql))
echo "Table 'quoter' was created sucessfully";
else
echo "Error creating table 'quoter': ".mysqli_error($mysqli);
还有你的config.php
$mysqli = new mysqli('localhost', 'fake_user', 'my_password', 'my_db');
if ($mysqli->connect_errno)
die('Connect Error: ' . $mysqli->connect_errno);
我希望您注意$mysqli
是处理连接的参数,因此您需要在数据库中执行操作时传递这个参数,例如
mysqli_query($mysqli,$sql);
//^here it is
【讨论】:
谢谢 Fabio,您的帖子内容丰富,非常感谢您的源/文档,在阅读完之后我将在 mysqli 中重新启动整个 config.php,是否有任何重大问题使用 createtable.php 文件,您可以看到它会与 config.php 中的 mysqli 冲突? @BenF 我已经更新了我的答案让你明白,请检查一下 再次感谢法比奥,我查阅了您发布的所有内容以正确学习并进行了一些小的更改,但基本上您让它为我工作:) 我实际上正在考虑将其全部切换回MySQL 但在您的帮助和参考下,MySQLi 并不那么令人生畏。 @BenF 欢迎您。我建议下一步学习prepared statements
,它将帮助您在任何情况下正确处理mysql数据库。
成功是短暂的,由于某种原因,即使我明确告诉它选择 testdb pastebin.com/B3UXrmxy,我也没有选择数据库以上是关于脚本未正确发送登录信息的主要内容,如果未能解决你的问题,请参考以下文章
将 ssh 登录发送到 Mattermost 的 bash 脚本的问题 [重复]