Поэтому я создаю 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
SELECT * FROM 'customerLeads' WHERE curdate() >= (dateUpdated + interval 2 day) AND 'assisgnedTo' = '$user_name' ORDER BY 'customerID' DESC
Вы использовали два раза предложение WHERE. У вас была ошибка синтаксиса в вашем MySQL. А также лучше использовать круглые скобки в ваших запросах, когда вы хотите сравнить результат вычисления числа.
Попробуйте это, чтобы получить правильное сообщение об ошибке от 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();
}
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!';