2011-12-21 4 views
-2

У меня есть сценарий, который я хочу выполнить cron. Его все прекрасное и денди, когда я тестировал в браузере, работая как следует, но когда он запускается из php cli (php cron.php), mysql_real_escape_string теряет указанное значение.mysql_real_escape_string в PHP CLI

Любая идея, почему?

ОБНОВЛЕНО с кодом и соединения, сделанные до mysql_real_escape_string (но по-прежнему не работает)

$dbh = new PDO("mysql:host=localhost;dbname=xxx", 'xxx', 'xxx'); 
foreach ($prosArr[$i] as $val => $key) { 
    $fieldsStr .= "`".trim($val). '` , '; 
    $fieldVal .= '"'.mysql_real_escape_string($key). '" , '; 
} 

Вот выход print_r из $ prosArr [$ я], полученные непосредственно из того же сценария CLI

Array 
(
    [ProductCode] => 10077 
    [BranchCode] => 100 
    [RetailPrice] => 499.0000 
    [PromotionPrice] => 0.0000 
    [FullPrice] => 499.0000 
) 
+5

Пожалуйста, покажите код. У вас активное соединение mySQL? –

+0

Трудно определить причины без подсказки – macjohn

+0

Хотелось бы, чтобы у меня было больше подсказки. Это работает в браузере. Значение возвращается как следует. Это просто не происходит, когда я запускаю его в CLI. – exentric

ответ

0

Не используйте mysql_real_escape_string() с PDO. Они разные библиотеки и не предназначены для использования друг с другом.

Используйте вместо этого PDO::Quote или параметризованные запросы.

+0

Прошу прощения, как сценарий работает в браузере и в CLI? Он работал в браузере, что означает, что у меня есть соединение, и, конечно же, данные, даже если они возвращены без значения, были вставлены в БД без проблем, и я знаю, что между ними нет ничего, что устанавливает соединение. Но, увы, я просто сделаю еще одно соединение перед этим. – exentric

+0

@exentric нет принципиальной разницы - невозможно сказать, что может быть неправильно, не видя какого-либо кода –

+0

Я добавил код и фактические данные, которые он будет обрабатывать. – exentric

0

Для использования mysql_real_escape_string необходимо сначала подключиться к MySQL.

На документации в разделе примечания

соединение MySQL требуется перед использованием mysql_real_escape_string() противном случае возникнет ошибка уровня E_WARNING, и FALSE, это возвращается. Если link_identifier не определен, используется последнее соединение MySQL .


EDIT: Вы должны использовать prepared statement и не смешивать MySQL и PDO API

Смежные вопросы