Surround
29-06-2011, 17:30
Добры день! Возникла странная ситуация! В скрипте собирается запрос:
class MysqlDB
{
private $mysql_link;
public function __construct()
{
$this->mysql_link = mysql_connect(MYSQL_SERVER, MYSQL_USER, MYSQL_PASSWORD) or die('Невозможно подключиться: ' . mysql_error());
mysql_select_db(MYSQL_DATABASE) or die (mysql_error());
mysql_query("SET SQL_MODE='STRICT_TRANS_TABLES'");//включение ограничей во FK
mysql_query("SET NAMES cp1251");
}
public function Query($sql)
{
$result = mysql_query($sql) or die(sprintf("<b>DB ERROR</b><br>%d: %s<br><b>IN QUERY</b><br>%s",mysql_errno(),mysql_error(),$sql));
return $result;
}
public function __destruct()
{
mysql_close($this->mysql_link);
}
}
function NVC($value)
{
if ($value!='') $value = "'$value'";
else $value = "NULL";
return htmlspecialchars($value, ENT_QUOTES);
}
$db = new MysqlDB();
$sql = "UPDATE abonents SET
abn_personal_acc = ".NVC($_POST["PerconalAcc"]).",
abn_contract_num = ".NVC($_POST["ConractNum"]).",
abn_login = ".NVC($_POST["Login"]).",
abn_passwd = ".NVC($_POST["Password"]).",
abn_lastname = ".NVC($_POST["Lastname"]).",
abn_name = ".NVC($_POST["Name"]).",
abn_fathername = ".NVC($_POST["Fathername"]).",
abn_passport_sn = ".NVC($_POST["PassportSn"]).",
abn_passport_data = ".NVC($_POST["PassportData"]).",
abn_born_date = ".NVC($Birthday).",
abn_born_place = ".NVC($_POST["BornPlace"]).",
abn_contact_phone = ".NVC($_POST["Phone"]).",
abn_city_id = '".$_POST["City"]."',
abn_street_id = '".$_POST["Street"]."',
abn_building_num = ".NVC($_POST["BuildingNum"]).",
abn_office_num = ".NVC($_POST["OfficeNum"])."
WHERE id = '".$_POST["AbonentId"]."'";
$db->Query($sql);
и при выполнении объект класса БД экранирует ошибку:
DB ERROR
1064: 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 ''2011-06-17', acp_comment = NULL WHERE id = '661' AND ac' at line 10
IN QUERY
UPDATE abn_cnct_points SET acp_port_id = '2262', acp_vlan = NULL, acp_ip = NULL, acp_tarif_id = '1', acp_city_id = '2', acp_street_id = '568', acp_building_num = NULL, acp_office_num = NULL, acp_start_date = '2011-06-17', acp_comment = NULL WHERE id = '661' AND acp_ab_id = '661'
Однако же если этот запрос дополдлинно скопировать и выполнить в phpMyAdmin, например, никаких ошибок нет и все исполняется.
В какую сторону копать, уже с толку сбился, подскажите, пожалуйста!
еще дополнение: если этот самый запрос вставить в переменную $sql в скрипте, все также срабатывает!
class MysqlDB
{
private $mysql_link;
public function __construct()
{
$this->mysql_link = mysql_connect(MYSQL_SERVER, MYSQL_USER, MYSQL_PASSWORD) or die('Невозможно подключиться: ' . mysql_error());
mysql_select_db(MYSQL_DATABASE) or die (mysql_error());
mysql_query("SET SQL_MODE='STRICT_TRANS_TABLES'");//включение ограничей во FK
mysql_query("SET NAMES cp1251");
}
public function Query($sql)
{
$result = mysql_query($sql) or die(sprintf("<b>DB ERROR</b><br>%d: %s<br><b>IN QUERY</b><br>%s",mysql_errno(),mysql_error(),$sql));
return $result;
}
public function __destruct()
{
mysql_close($this->mysql_link);
}
}
function NVC($value)
{
if ($value!='') $value = "'$value'";
else $value = "NULL";
return htmlspecialchars($value, ENT_QUOTES);
}
$db = new MysqlDB();
$sql = "UPDATE abonents SET
abn_personal_acc = ".NVC($_POST["PerconalAcc"]).",
abn_contract_num = ".NVC($_POST["ConractNum"]).",
abn_login = ".NVC($_POST["Login"]).",
abn_passwd = ".NVC($_POST["Password"]).",
abn_lastname = ".NVC($_POST["Lastname"]).",
abn_name = ".NVC($_POST["Name"]).",
abn_fathername = ".NVC($_POST["Fathername"]).",
abn_passport_sn = ".NVC($_POST["PassportSn"]).",
abn_passport_data = ".NVC($_POST["PassportData"]).",
abn_born_date = ".NVC($Birthday).",
abn_born_place = ".NVC($_POST["BornPlace"]).",
abn_contact_phone = ".NVC($_POST["Phone"]).",
abn_city_id = '".$_POST["City"]."',
abn_street_id = '".$_POST["Street"]."',
abn_building_num = ".NVC($_POST["BuildingNum"]).",
abn_office_num = ".NVC($_POST["OfficeNum"])."
WHERE id = '".$_POST["AbonentId"]."'";
$db->Query($sql);
и при выполнении объект класса БД экранирует ошибку:
DB ERROR
1064: 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 ''2011-06-17', acp_comment = NULL WHERE id = '661' AND ac' at line 10
IN QUERY
UPDATE abn_cnct_points SET acp_port_id = '2262', acp_vlan = NULL, acp_ip = NULL, acp_tarif_id = '1', acp_city_id = '2', acp_street_id = '568', acp_building_num = NULL, acp_office_num = NULL, acp_start_date = '2011-06-17', acp_comment = NULL WHERE id = '661' AND acp_ab_id = '661'
Однако же если этот запрос дополдлинно скопировать и выполнить в phpMyAdmin, например, никаких ошибок нет и все исполняется.
В какую сторону копать, уже с толку сбился, подскажите, пожалуйста!
еще дополнение: если этот самый запрос вставить в переменную $sql в скрипте, все также срабатывает!