在外部PHP文件中使用PDO连接mysql数据库
我有一个Index.php,它有一个表单,用于在提交表单时获取用户详细信息。它将数据发送到一个新的program.php,以便在program.php中进行验证。我链接了db.php,在其中我连接到了数据库,db.php的代码如下所示:在外部PHP文件中使用PDO连接mysql数据库,php,mysql,pdo,mysqli,connection,Php,Mysql,Pdo,Mysqli,Connection,我有一个Index.php,它有一个表单,用于在提交表单时获取用户详细信息。它将数据发送到一个新的program.php,以便在program.php中进行验证。我链接了db.php,在其中我连接到了数据库,db.php的代码如下所示: <?php $link=mysql_connect('localhost', 'root', '') or die ("mysql_connect_error()"); $dbselect=mysql_select_db('test',$l
<?php
$link=mysql_connect('localhost', 'root', '') or die ("mysql_connect_error()");
$dbselect=mysql_select_db('test',$link) or die ("Error while connecting the database");
?>
<?php
$hostname='localhost';
$username='root';
$password='';
try
{
$dbh = new PDO("mysql:host=$hostname;dbname=test",$username,$password);
$dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); // <== add this line
$dbh = null;
}
catch(PDOException $e)
{
echo $e->getMessage();
}
?>
我得到的更新错误
注意:在第6行的B:\XAMPP\htdocs\test\program.php中使用未定义的常量test\u sign\u-up-假定为“test\u sign\u”
注意:未定义索引:test\u在第6行的B:\XAMPP\htdocs\test\program.php中注册
注意:在第32行的B:\XAMPP\htdocs\test\program.php中使用未定义的常量test\u login-假定为“test\u login”
注意:在第35行的B:\XAMPP\htdocs\test\program.php中使用了未定义的常量id-假定为'id'
注意:在第36行的B:\XAMPP\htdocs\test\program.php中使用未定义的常量id\u pass-假定为“id\u pass”
未选择任何数据库
警告:mysql\u fetch\u array()希望参数1是资源,布尔值在第41行的B:\XAMPP\htdocs\test\program.php中给出
警告:mysql_num_rows()希望参数1是资源,布尔值在第42行的B:\XAMPP\htdocs\test\program.php中给出
注意:在第56行的B:\XAMPP\htdocs\test\program.php中使用了未定义的常量id-假定为'id'
注意:在第57行的B:\XAMPP\htdocs\test\program.php中使用未定义的常量id\u pass-假定为“id\u pass”
不正确的细节
注意:在第73行的B:\XAMPP\htdocs\test\program.php中使用未定义的常量注销-假定为“注销”
注意:未定义索引:在代码第73行的B:\XAMPP\htdocs\test\program.php中注销,首先创建到数据库的连接,然后将其设置为null。
此后,无论何时尝试访问
$dbh
对象,它都将null
$dbh = new PDO("mysql:host=$hostname;dbname=test",$username,$password);
$dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$dbh = null; // <= Right here.
如果您在转换代码时遇到问题,我建议您阅读中的PDO
进一步建议: 当您包含这样一个文件时,每次脚本运行只需要包含一次,最好确保只包含一次。这可以通过使用
include_once
关键字来完成,而不仅仅是include
。现在,如果您使用include,这将包括脚本(如果可能),如果它不能,它将继续运行脚本,并且当您尝试使用文件中设置的变量时,脚本将崩溃。在本例中,我建议使用
require
(或者更确切地说是require\u once
)关键字,而不是使用include
。其中将包括文件,如果无法执行,则停止脚本执行并显示错误消息(如果您有错误报告)。您不仅需要更改db.php,还需要更改代码中的所有查询。并始终使用准备好的语句将变量传递给查询。否则PDO不会保护你免受注射
在我写这篇文章的时候,它仍然是不完整的,但可以提供您可以从中开始的基本知识。您会遇到什么错误?
$hostname='localhost
缺少
这只是这段代码中的一个输入错误,还是您复制了真实的代码?@Jite抱歉,在添加被删除的空格时,错误地更新了代码code@donald123我有很多错误,我无法复制粘贴到这里,连接没有错误,但从数据库中获取文件,我猜连接是可以工作的,但由于它是在外部完成的,所以itI有一些问题,我尝试过这样做,但问题仍然是相同的。您如何查询数据库?你会犯什么错误?在您展示的代码中,这是我能注意到的唯一问题,它可能存在于包含db.php
文件的文件中。我现在已经更新了我的代码是的,正如我所提到的,您不能调用您以前的mysql_*查询并期望它们工作(特别是当您不再像以前那样创建mysql连接时),您必须将所有查询更改为使用PDO
和$dbh
对象。
$dbh = new PDO("mysql:host=$hostname;dbname=test",$username,$password);
$dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$dbh = null; // <= Right here.
// Earlier code using `mysql_* API`:
$sql="select * from admin_database where id = '$id' and id_pass= '$id_pass'";
$result=mysql_query($sql);
$row=mysql_fetch_array($result);
// Would look something like this using PDO:
$statement = $dbh->prepare('SELECT * FROM admin_database WHERE id =:id AND id_pass =:idpass');
// Here you can either use the bindParam method, or pass the params right into the execute call:
$statement->execute(array('id' => $id, 'idpass' => $id_pass);
$row = $statement->fetch();