PHP несколько соединений с БД

0

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

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

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

Неустранимая ошибка: необработанная ошибка: вызов функции-члена fetch() для логического значения в /.../customerLeadReminder.php:18 Трассировка стека: # 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 показывает:

Массив ([email] => [email protected] [0] => [email protected] [имя] => Джо [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

  • 0
    Если я var_dump ($ salesConn); я получаю: объект (PDO) # 1 (0) {}
  • 0
    Извините, строка 18 выглядит так: while ($ cRow = $ customerList-> fetch ()) {
Показать ещё 13 комментариев
Теги:
database
while-loop
fetch

3 ответа

1
SELECT * FROM 'customerLeads' WHERE curdate() >= (dateUpdated + interval 2 day)  AND 'assisgnedTo' = '$user_name' ORDER BY 'customerID' DESC

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

  • 0
    Нет, я имею в виду, да, я сделал, но это не имеет никакого значения для ошибки
  • 0
    Вы уверены, что подключены к БД? Ваше соединение работает? причина вышеупомянутой строки должна бросить прямую синтаксическую ошибку.
Показать ещё 3 комментария
1

Попробуйте это, чтобы получить правильное сообщение об ошибке от 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();
}
0

Это скрипт-тестер, чтобы установить, что не так с вашим SQL.

localhost, DBNAME, USERNAME, PASSWORD - это жестко закодированные значения, которые 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!';

Ещё вопросы

Сообщество Overcoder
Наверх
Меню