脚本未正确发送登录信息

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 中混合了mysqlimysql 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 脚本的问题 [重复]

shell脚本的应用——用户登录验证程序

python 脚本模拟登录后注销操作,使用登录时的cookies,注销时仍提示未登录

python smtp邮件发送失败怎么办

Zabbix_监控报警无法通过微信发送信息

Linux系统shell脚本之向指定终端发送消息