Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Вебмастеру (http://forum.oszone.net/forumdisplay.php?f=22)
-   -   [решено] не работает UPDATE-запрос (http://forum.oszone.net/showthread.php?t=210126)

Surround 29-06-2011 17:30 1703711

не работает UPDATE-запрос
 
Добры день! Возникла странная ситуация! В скрипте собирается запрос:
PHP код:

class MysqlDB
{
    
private $mysql_link;
    
public function __construct()
    {
        
$this->mysql_link mysql_connect(MYSQL_SERVERMYSQL_USERMYSQL_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($valueENT_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 в скрипте, все также срабатывает!

Sham 29-06-2011 18:14 1703733

есть ограничения при разных SQL_MODE на значение полей. rtm.

мб дату в таком виде в поле нельзя совать (в таком значении SQL_MODE), зависит от формата поля в таблице... пробуйте сначала закоментить строку с SQL_MODE (если обновится, то значит ограничения режима).

Surround 30-06-2011 09:00 1704058

не, дату как раз можно, это ж формат SQL, и запрос из PMA работает.
Разобрался в чем проблема - в экранировании кавычек htmlspecialchars. Запрос отправлялся с кавычками в виде html-сущностей, а в браузере выводился он же, но только эти сущности выглядели нормально. Заглянул в исходный код страницы и увидел следующее (нижние подчеркивание вставлено в данном случае, чтобы код не преобразовывался в символ):
Код:

UPDATE abn_cnct_points SET acp_port_id = &_#39; 2262 &_#39;
Спасибо!


Время: 17:59.

Время: 17:59.
© OSzone.net 2001-