如何解决如何将mysqli转换为PDO?
<?php
require_once('dbconfig.php');
global $con;
$query = $con->prepare("SELECT * FROM userinfo order by id DESC");
$query->execute();
mysqli_stmt_bind_result($query,$id,$name,$username,$password);
解决方法
尝试一下
$dsn = "mysql:host=localhost;dbname=myDatabase;charset=utf8mb4";
$options = [
PDO::ATTR_EMULATE_PREPARES => false,// turn off emulation mode for "real" prepared statements
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,//turn on errors in the form of exceptions
PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,//make the default fetch be an associative array
];
try {
$pdo = new PDO($dsn,"username","password",$options);
} catch (Exception $e) {
error_log($e->getMessage());
exit('Something weird happened'); //something a user can understand
}
$arr = $pdo->query("SELECT * FROM myTable")->fetchAll(PDO::FETCH_ASSOC);
,
您应该使用->bindColumn
Manual
另请参阅This answer。
- 最佳实践:请勿使用
SELECT *
来定义需要从表中获取的每一列。 - 请勿全球化连接变量。这既有安全隐患,又会增加膨胀,在您的代码中则不需要。
- 由于这是一条静态语句,因此无需准备,就可以使用
->query
而不是prepare
。
解决方案:
$query = $con->query("SELECT id,name,username,password FROM userinfo ORDER BY id DESC");
try {
$query->execute();
$query->bindColumn(1,$id);
$query->bindColumn(2,$name);
$query->bindColumn(3,$username);
$query->bindColumn(4,$password);
}
catch (PDOException $ex) {
error_log(print_r($ex,true);
}
或者:
PDO :: query()的一个不错的功能是,它使您可以迭代成功执行的SELECT语句返回的行集。 From the manual
foreach ($conn->query('SELECT id,password FROM userinfo ORDER BY id DESC') as $row) {
print $row['id'] . " is the ID\n";
print $row['name'] . " is the Name\n";
print $row['username'] . " is the Username\n";
}
另请参见:
Mzea对于他们的答案有一些很好的提示,您应该使用他们的$options
设置以及建议的utf8mb4
连接字符集。
他们使用->fetchAll
的建议也完全有效。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。