【问题标题】:PDO and query troubleshoot - basicPDO 和查询故障排除 - 基本
【发布时间】:2019-02-18 06:17:14
【问题描述】:

我正在将旧的 php 5.6 代码转换为 7.2 并学习如何使用 PDO。 我已经到了陷入困境的地步,想向社区学习。

我创建了一个测试文件结构:

db.php:

<?php    
try {
    $conn = new PDO($initlocation, $username, $pwdata);
    $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    echo "worked"; // THIS WORKS ON THE SCREEN
}
catch(PDOException $e){
    echo "Connection failed: " . $e->getMessage();   
}
?>

test.php:

<?php

include("db.php");

$user_query='SELECT * FROM `users` WHERE `email`="user1.a@gmail.com"';

echo $user_query; // I GET THE QUERY PRINTED ON THE SCREEN
echo is_object($conn); // THIS IS 1 WHICH IS GOD
echo "<br>";
echo is_object($res); // THIS IS 1 WHICH IS ODD

try{
    $res = $conn->query($user_query);
}
catch (Exception $e){
    echo "Query failed: " . $e->getMessage(); // NOTHING 
}

echo "<br>";
echo is_object($res); // NOTHING

$data_exists = $res->fetch();         
if ($data_exists==1) echo "yes"; // NOTHING            
?>

我也将测试方法留在了代码中,我渴望找到更好的解决方案来找出为什么查询没有显示任何内容。

目的是在数据库中找到电子邮件地址并给我一些反馈。提前感谢所有的 cmets,我只会从他们那里学习。

附加信息: 当我直接在数据库中运行 SQL 查询时,它确实给了我具有相同电子邮件的记录。

【问题讨论】:

  • 您当前的输出是多少?您遇到了哪些具体错误?
  • 目前我什么都没有,同时如果我直接在数据库中运行 SQL 查询,我会得到记录,因为数据库中确实存在电子邮件地址。
  • 你有一堆echo 语句。如果您没有得到任何输出,则可能是 Web 服务器有问题,或者代码执行方式有其他问题。
  • @cegfault 感谢您抽出宝贵时间在问题中添加了输出。再次感谢您。
  • 你应该抓到PDOException,而不是Exception

标签: php pdo


【解决方案1】:

尝试以下方法并使用准备好的语句,例如防止 SQL 注入。

$stmt = $pdo->prepare('SELECT * FROM users WHERE email = ?');
$stmt->execute([$email]);
$user = $stmt->fetch();

【讨论】:

  • 我试过了,但屏幕上什么也没有。我很想了解如何解决无法正常工作的问题,谢谢您的意见。我也会添加安全元素位。
  • 您是否尝试打开显示错误? ini_set('display_errors', 1);
  • 数组到字符串的转换在...第14行数组
  • 那个 PHP Notice 给出了问题所在的线索,请将错误添加到描述中,这样可以帮助以后的读者。
  • 是的,它可以返回一个数组,但是 fetch 可以与不同的 fetch 样式一起使用。像 PDO::FETCH_OBJ 它以匿名对象的形式返回一行,以列名作为属性;
猜你喜欢
  • 1970-01-01
  • 2013-04-05
  • 2021-04-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-01-08
  • 1970-01-01
  • 2016-06-18
相关资源
最近更新 更多