Ошибка про запуске скрипта PHP
C базой отлично конектится (авторизация же работает)
Delivery starts!MySQL error: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 1
Код:
<?php
echo "Delivery starts!";
include_once("../config.php");
include_once("functions.php");
include_once("class/class.phpmailer.php");
include_once("class/class.smtp.php");
include_once("class/dbrequest.class.php");
$got_tpl_id = $_GET["tpl_id"];
$curr_date = date("d-m-Y/H:i");
//PHPMailer pre-conf
$mailer = new PHPMailer();
$mailer->CharSet = "utf8";
$mailer->IsHTML(true);
$mailer->IsSMTP();
$mailer->Subject = "Тема письма";
$mailer->SetFrom("mail@exempl.com","comp_name");
$mailer->SetLanguage("ru");
session_start();
ignore_user_abort(1);
set_time_limit(3600);
$dbrequest = new DBRequest();
$dbrequest->mysqlConnect();
if($got_tpl_id){
$tpl = explode("-",$got_tpl_id);
foreach($tpl as $otpl){
$where = "`id` = '$otpl'";
if(!next($tpl)){
$where .= " OR ";
}
}
$tpl_data = $dbrequest->select("`templates`.*, `companies`.`black_list`","`templates`, `companies`","`templates`.`comp_id` = `companies`.`id` AND".$where);
$usr_data = $dbrequest->select("*","`users`","`gurope` = 'client' OR `gurope` = 'subscriber'");
foreach($tpl_data as $curr_tpl){
$mailer->ClearBCCs();
$mailer->ClearAddresses();
if(!check_sends($tpl_comp_id)) continue;
extract($tpl_data);
$mailer->Body = $code;
if($black_list != "" && $black_list != "N;") $black_ids = unserialize($black_list); else $black_ids []= 0;
foreach($usr_data as $one_usr){
if(array_search($one_usr["comp_id"],$black_ids)) continue;
else $mailer->AddBCC($one_usr["email"]);
}
$maillist = file("maillist.txt");
foreach($maillist as $omail){
$mailer->AddBCC($omail);
}
$mailer->Send();
$errors = $mailer->ErrorInfo."/n";
/*
$sent_num = "UPDATE `companies` SET `tsent` = `tsent` + 1 WHERE `id` = '$tpl_comp_id'";
mysql_query($sent_num);*/
}
file_put_contents("log.txt",$errors);
}
else{
echo "nobody here";
}
?>
echo "Delivery starts!";
include_once("../config.php");
include_once("functions.php");
include_once("class/class.phpmailer.php");
include_once("class/class.smtp.php");
include_once("class/dbrequest.class.php");
$got_tpl_id = $_GET["tpl_id"];
$curr_date = date("d-m-Y/H:i");
//PHPMailer pre-conf
$mailer = new PHPMailer();
$mailer->CharSet = "utf8";
$mailer->IsHTML(true);
$mailer->IsSMTP();
$mailer->Subject = "Тема письма";
$mailer->SetFrom("mail@exempl.com","comp_name");
$mailer->SetLanguage("ru");
session_start();
ignore_user_abort(1);
set_time_limit(3600);
$dbrequest = new DBRequest();
$dbrequest->mysqlConnect();
if($got_tpl_id){
$tpl = explode("-",$got_tpl_id);
foreach($tpl as $otpl){
$where = "`id` = '$otpl'";
if(!next($tpl)){
$where .= " OR ";
}
}
$tpl_data = $dbrequest->select("`templates`.*, `companies`.`black_list`","`templates`, `companies`","`templates`.`comp_id` = `companies`.`id` AND".$where);
$usr_data = $dbrequest->select("*","`users`","`gurope` = 'client' OR `gurope` = 'subscriber'");
foreach($tpl_data as $curr_tpl){
$mailer->ClearBCCs();
$mailer->ClearAddresses();
if(!check_sends($tpl_comp_id)) continue;
extract($tpl_data);
$mailer->Body = $code;
if($black_list != "" && $black_list != "N;") $black_ids = unserialize($black_list); else $black_ids []= 0;
foreach($usr_data as $one_usr){
if(array_search($one_usr["comp_id"],$black_ids)) continue;
else $mailer->AddBCC($one_usr["email"]);
}
$maillist = file("maillist.txt");
foreach($maillist as $omail){
$mailer->AddBCC($omail);
}
$mailer->Send();
$errors = $mailer->ErrorInfo."/n";
/*
$sent_num = "UPDATE `companies` SET `tsent` = `tsent` + 1 WHERE `id` = '$tpl_comp_id'";
mysql_query($sent_num);*/
}
file_put_contents("log.txt",$errors);
}
else{
echo "nobody here";
}
?>
Что не так здесь??
Код:
foreach($tpl as $otpl){
$where = "`id` = '$otpl'";
if(!next($tpl)){
$where .= " OR ";
}
}
$where = "`id` = '$otpl'";
if(!next($tpl)){
$where .= " OR ";
}
}
Чтобы убедиться в этом, выведете полученный SQL-запрос, посмотрите, что там нагенерировалось.
Все та же ошибка... Что и была....
Похвастайтесь полученным SQL-запросом
print_f ($tpl_data); // что бы вывести запрос
и ничего не происходит... Та же самая надпись что и была... Или это я уже что то не понимаю...
$where = "`id` = '$otpl'";
if(!next($tpl)){
$where .= " OR ";
}
}
echo $where;
Delivery starts!`id` = '8' OR MySQL error: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 1
Но всеравно не ясно для меня эта ошибка :(
Код:
WHERE `id`='8' OR
Т.е. OR в конце совершенно лишний. На это и ругается MySQL.
Не знаю, чего вы хотели добиться своим циклом, но позволю себе предположить, что он должен выглядеть следующим образом:
Код:
$where = "";
foreach($tpl as $otpl){
if ($where != "") {
$where .= " OR ";
}
$where .= "`id` = '$otpl'";
}
foreach($tpl as $otpl){
if ($where != "") {
$where .= " OR ";
}
$where .= "`id` = '$otpl'";
}
Мой вариант аккумулирует все опции через OR, у вас же всегда был только один параметр (переменная $where теряла значение внутри цикла). К тому же вы использовали OR, если next не вернул бы ничего.
Спасибо, твой код помог решить проблему... Но тут же появилась вторая..
Delivery starts!`id` = '8'MySQL error: Column 'id' in field list is ambiguous
Но в той таблице есть колонка с именем "id"...
ambiguous , Прилагательное
[æmˈbɪɡjuəs]
неоднозначный
сомнительный
двусмысленный
Код:
$tpl_data = $dbrequest->SELECT("`templates`.*, `companies`.`black_list`","`templates`, `companies`","`templates`.`comp_id` = `companies`.`id` AND".$where);
Выборка из двух таблиц, в которых есть поле id, и хз какой id ты в where указываешь.
либо так:
Код:
foreach($tpl as $otpl){
$where = "`templates`.`id` = '$otpl'";
if(!next($tpl)){
$where .= " OR ";
}
}
$where = "`templates`.`id` = '$otpl'";
if(!next($tpl)){
$where .= " OR ";
}
}
либо както по другому :D
Я так понимаю, что скрипт просто не понимает с какой базы брать id?
Цитата: vahminator
Я так понимаю, что скрипт просто не понимает с какой базы брать id?
Правильно понимаешь.
Кэп подсказал?