PHP несколько соединений с БД - PullRequest
0 голосов
/ 06 февраля 2019

Итак, я создаю cronJob, который выберет ВСЕХ пользователей из моей таблицы пользователей, а затем сохранит полные имена пользователей в переменной.Все, что происходит внутри цикла while, внутри того же цикла, я выбираю ВСЕ из своих таблиц customerLeads, где столбец assignedTo равен полному имени пользователя.Затем внутри этого цикла я хочу записать customerName и сохранить их все в массиве.Таким образом, у каждого пользователя будет свой массив, в котором есть все клиенты.

Цель этого - запускать это каждое утро, чтобы пользователи получали электронное письмо, если они не обновляли customerLead в течение 2 дней.

Однако я продолжаю получать эту ошибку;

Неустранимая ошибка: необученная ошибка: вызов функции-члена fetch () для логического значения в /.../customerLeadReminder.php:18 Stacktrace: # 0 {main} добавлено в /homepages/.../customerLeadReminder.php в строке 18

Я посмотрел в Интернете, и все говорят, что это соединение не работает, ноЯ проверил, и соединение работает нормально ...

Вопрос: Почему появляется эта ошибка и что я делаю неправильно?

<?php  
//Error Reporting
ini_set('display_startup_errors', 1);
ini_set('display_errors', 1);
error_reporting(-1);


require '../includes/conn.php';

  $userList = $salesConn->query("SELECT `email`, `firstname`, `lastname` FROM `users`");

  while ($uRow = $userList->fetch()) {

    $user_name = $uRow['firstname']." ".$uRow['lastname'];
    print_r($uRow);
    $customerList = $salesConn->query("SELECT * FROM `customerLeads` WHERE curdate() >= (dateUpdated + interval 2 day)  AND `assisgnedTo` = '$user_name' ORDER BY `customerID` DESC");
// show this on error
if (!$customerList) {
     // For PDO:
    echo $salesConn->errorInfo();
}
      while ($cRow = $customerList->fetch()) {
        $leadID = $cRow['customerID'];
        $firstName = $cRow['customerFirstName'];
        $lastName = $cRow['customerLastName'];
        $tele = $cRow['customerTel'];
        ....
        $dateCreated = $cRow['dateCreated'];
        $dateUpdated = $cRow['dateUpdated'];

      }
  }
  ?>

При печати $uRow он показывает:

Array ([электронная почта] => joe.blogs@outlook.com [0] => joe.blogs@outlook.com [firstname] => Joe [1] => Блоги [фамилия]=> Блоги [2] => Блоги)

Страница подключения:

<?php
$salesConn = new PDO('mysql:host=HOST;dbname=DBNAME', 'USERNAME', 'PASSWORD');
$salesConn->setAttribute(PDO::ATTR_ERRMODE);
?>

Новая ошибка: Предупреждение: PDO :: setAttribute () ожидает ровно 2 параметра, 1 заданов /homepages/38/d735513801/htdocs/includes/conn.php в строке 8

Ответы [ 3 ]

0 голосов
/ 06 февраля 2019
SELECT * FROM `customerLeads` WHERE curdate() >= (dateUpdated + interval 2 day)  AND `assisgnedTo` = '$user_name' ORDER BY `customerID` DESC

Вы дважды использовали предложение WHERE.У вас была ошибка синтаксиса в вашем MySQL.А также лучше использовать круглые скобки в своих запросах, если вы хотите сравнить результат вычисления числа.

0 голосов
/ 06 февраля 2019

Это скрипт-тестер, позволяющий определить, что не так с вашим SQL.

localhost , DBNAME , USERNAME , ПАРОЛЬ - это жестко закодированные значения, которые OP не дал, поэтому OP должен обновить их самостоятельно.

Этот скрипт ниже использует правильный PDO и исключения.Привыкайте к использованию исключений. Прочтите о них, изучите их .Этот скрипт также правильно использует Подготовленные операторы - Вы действительно действительно ( действительно ) должны использовать Подготовленные операторы в своем SQL.

<?php
error_log( 'php version: ', phpversion());

try {
    $salesConn = new PDO('mysql:host=localhost;dbname=*DBNAME*;charset=utf8', '*USERNAME*', '*PASSWORD*');  
    error_log( 'client version: ', $salesConn->getAttribute(PDO::ATTR_CLIENT_VERSION));
    error_log( 'server version: ', $salesConn->getAttribute(PDO::ATTR_SERVER_VERSION));
    $salesConn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    $salesConn->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
}
catch(PDOException $err) {
    error_log(print_r($err->getMessage(),true));
    die('Error log ONE was generated.');
}

$sql = "SELECT * FROM `customerLeads` WHERE CURDATE() >= (dateUpdated + INTERVAL 2 DAY)  AND `assisgnedTo` = :assigned ORDER BY `customerID` DESC"

$user_name = "Set ths value to whatever the username is you want to check";

try
{
    $stmt = $salesConn->prepare($sql);
    $stmt->bindValue(':assigned', $user_name, PDO::PARAM_STR);
    $stmt->execute();
    // The below result can be put into a loop to output each $row in turn.
    $row = $stmt->fetch(PDO::FETCH_ASSOC);
}
catch(PDOException $err)
{
    error_log(print_r($err->getMessage(),true));
    error_log(print_r($salesConn->errorInfo(),true));
    die('Error log TWO was generated.');
}

echo 'done. Got this far, everything worked!';
0 голосов
/ 06 февраля 2019

Попробуйте, чтобы получить правильное сообщение об ошибке от MySQL

$customerList = $salesConn->query("SELECT * FROM `customerLeads` WHERE curdate() >= dateUpdated + interval 2 day AND WHERE `assisgnedTo` = '$user_name' ORDER BY `customerID` DESC");

// show this on error
if (!$customerList) {
     /***
      * NOTE: in a perfect world this should be:
      * error_log(print_r($salesConn->errorInfo(),true)); OR
      * error_log(print_r($salesConn->error,true));
      ***/

     // For MySQLi:
     echo $salesConn->error;

     // For PDO:
     echo $salesConn->errorInfo();
}
...