Показаны сообщения с ярлыком php. Показать все сообщения
Показаны сообщения с ярлыком php. Показать все сообщения

четверг, 15 июля 2010 г.

Единственное значение из mysql на php в 2 строки

Бывает нужно получить единственное значение из MySQL и огород из запроса и получения строки из результата, а потом использования значения полученного массива кажется явно лишним.

Т.е. стандартное (академическое) решение выглядит так:


$sql = mysqli_query("SELECT COUNT(*) FROM `table` WHERE `col`='value';"); // получаем данные
$row = mysqli_fetch_assoc($sql); // получаем строку в массив
echo $row['COUNT(*)']; // используем значение массива
// неудобная переменная, нужно одно значение, а используем массив

// можно присвоить значение новой переменной
$count = $row['COUNT(*)'];

// либо переопределить массив в переменную
$row = $row['COUNT(*)'];

// но это либо дополнительная переменная,
// либо не логичное название переменной,
// либо с самого начала нужно было использовать правильное название...

В принципе предлагаемый вариант немного удобнее для последующего использования:


$sql = mysqli_query("SELECT COUNT(*) FROM `table` WHERE `col`='value';"); // получаем данные
list($count) = mysqli_fetch_array($sql); // получаем строку в массив и 
// первое значение сразу присваиваем переменной
echo $count; // используем переменную

ООП вариант сообразите по аналогии...

воскресенье, 11 июля 2010 г.

Возвращаемые значения 1С SOAP в PHP

В SOAP как и в других нормальных программерских технологиях есть значения передаваемые и возвращаемые. Так вот, если Ваш 1С кодер есть Вам мозг и утверждает, что нужно передавать в SOAP переменную (или ссылку на неё) в которой будет возвращаться значение - не верьте ему. На самом деле возвращаемое значение/я идёт/ут дополнительными массивами/объектами в возвращаемом результате вызова SOAP метода.

Недавний пример. 1Сник заявляет, что нужно вызывать метод

CheckBalances(OrderData, TradeBalances)


при этом TradeBalances это пустая переменная в которой будет возвращаться результат (вообще в PHP реализации SOAP не понятно как передать ссылку на переменную в именованном массиве, да и вообще странно это...). На самом деле оказалось надо так:


CheckBalances(OrderData)


а TradeBalances возвращается следующим элементом массива в возвращаемом результирующем объекте SOAP. Типа:

$SOAPresult = $SOAPclient->CheckBalances(OrderData);

и результат

stdClass Object
(
    [return] => stdClass Object
        (
            [success] => 
            [message] => 
        )

    [TradeBalances] => stdClass Object
        (
             ...
        )
)

четверг, 8 июля 2010 г.

Пробный шар: поиск неугодного вызова метода с помощью perl


Иногда нет возможности запустить дебаггер и понять, где именно происходит вызов того или иного метода.
Например, в одном проекте есть метод на php, который должен выдавать пользователю “ошибку 404”:
//class some_class {
funciton notFound($reason=”no reason”) {
//…
echo $reason;
//…
}
И есть пара сотен мест, где метод вызван без параметра (и выдает ‘no reason’). Как быть, если надо найти, где вызывается этот метод?
Хинт: можно заменить все вызовы метода без параметров - notFound() на вызовы notFound со случайным числом в качестве параметра (например: notFound(321653)) потом посмотреть на это число в браузере и спокойно найти его, например, с помощью команды grep.
Замену вызовов метода notFound() на notFound(random int) нам поможет сделать такой скрипт на перле:

#!/usr/bin/perl  
#  
 
my $file = $ARGV[0]; 
open FILE, $file or die "failed to open $file\n";  
my $text = join("", <FILE>);  
close FILE;  
 
$text =~ s/notFound\(\)/'notFound(' . int(rand() * 1000000) . ')'/ge;  
 
open (FILE, ">$file") or die "failed to write to $file\n"; 
print FILE $text; 
close(FILE); 
запуск:
chmod +x ./script.pl
find /path/to/project -type f -name *.php -exec ./script.pl {} \;
затем - поиск grep’ом:
grep -R “ваше заветное число” /path/to/project/*
так вы найдете строку, которая, возможно, портит вам жизнь
ps: Если вам приходится аналогичными способами работать с кодом, это свидетельствует о весьма тяжелом состоянии вашего проекта (тэг “код с душком”). Подумайте о рефакторинге, но если проект рефакторингу не подлежит, то иногда перл и средства командной строки вам помогут))

Что это?

Бывает программируешь-программируешь или администрируешь-администрируешь и как напишешь полезный скрипт, который может не только тебе, но и другим помочь программировать или администрировать. Так не выкидывай же его! Отправляй на code-hints.ns-keip.ru!