Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php fetchColumn()在简单查询中失败,但在另一个查询中没有问题_Php_Mysql_Pdo - Fatal编程技术网

Php fetchColumn()在简单查询中失败,但在另一个查询中没有问题

Php fetchColumn()在简单查询中失败,但在另一个查询中没有问题,php,mysql,pdo,Php,Mysql,Pdo,我需要另一双眼睛来观察这个。我不明白为什么这个函数工作得很好: function get_password($db, $id) { try { $sql = $db->prepare('SELECT password FROM employee WHERE employee.emp_id = ?'); $sql->bindParam(1, $id); $sql->execute(); $pa

我需要另一双眼睛来观察这个。我不明白为什么这个函数工作得很好:

function get_password($db, $id) {
  try {
    $sql = $db->prepare('SELECT password FROM employee 
                         WHERE employee.emp_id = ?');
    $sql->bindParam(1, $id);
    $sql->execute();
    $password = $sql->fetchColumn();
  } catch(Exception $e) {
    echo $e->getMessage();
    die();
  }

  return $password;
}
此函数在fetchColumn上失败:

function get_name($db, $email) {
  try {
    $sql = $db->prepare('SELECT login
                         FROM employee
                         WHERE email = ?');
    $sql->bindParam(1, $email);
    $sql->execute();
    $user_name = $sql->fetchColumn(0);

  } catch(Exception $e) {
    echo $e->getMessage();
    die();
  }
  return $user_name;
}
我已核实以下情况:

我正在整理邮件,所以里面没有多余的空白 查询是从命令行进行的 prepare语句成功,errorInfo不返回任何内容 bindParam语句返回true,errorInfo不返回任何内容 execute语句返回1行,errorInfo不返回任何内容 fetchColumn0语句返回False ARGH!!!!但是errorInfo仍然没有返回任何内容。 我还尝试过使用justfetchcolumn、fetchAll和其他获取尝试

我还尝试在SELECT中重新写入以下内容:

'SELECT employee.login FROM employee WHERE employee.email = ?'
但结果是一样的


这里有什么我不知道的概念吗?关于如何调试这个问题,还有其他想法吗?

出于好奇:如果直接从php代码执行查询而不使用prepared语句,会发生什么情况,那么可以获取结果吗?如果没有行可读取,fetchColumn返回false。您是否转储了查询字符串?电子邮件的价值是什么?没有特别的角色吗?你确定你的控制台应用程序和你的web应用程序使用的是同一个数据库吗?在插入之前你是否修剪了电子邮件地址?您使用哪种排序规则,区分大小写吗?您确定,您用于从命令行测试的电子邮件地址与用于测试您的应用程序的电子邮件地址相同吗?没有输入错误,大小写相同,所有内容都相同?如果在$sql->执行并转储值之后立即插入$sql->行数,您会得到什么?请注意,您实际上应该处理这个用例,因为现在您只是假设至少返回一行,这在您的代码中不是一个好的假设。@Shadow-非常好的建议。我用我的密码硬编码了这封邮件,但还是失败了。所以我在工作区再次尝试,但也失败了。昨天我认为它也失败了,但我没有看到它。我用错了电子邮件!