2011-08-11 5 views
2

Это то, что я делаю сейчас: - в PHPPHP массив в качестве входных данных для хранимой процедуры

foreach($array as $value) 
{ 
$query = select abc from tblname where colname =" .$value. 
// fire query 
} 

тогда я создать массив этих значений и отображения соответственно.

ПРОБЛЕМА: -

Я применил Еогеасп, который запускает в запросе каждый раз, когда он встречает значение в массиве. результат, если у меня есть 10 значений в моем массиве, он запускает 10 запросов. и использует сеть 10 раз, результат медленный выход.

Что я хочу -

Я хочу дать массив хранимой процедуры, которая должна дать мне ResultSet, который будет иметь выходы, соответствующие всем элементам массива.

Я знаю, что это можно сделать, но не знаю как. mysql не принимает массивы как тип данных.

Результатом является то, что сеть должна использоваться только один раз, despit любого количества значений в массиве.

КАК -

StoredProcedure(inputMysqlARRAY) // not possible, need a workaroung 
{ 
// fire simple select(same) query for each value. 
} 

затем вызвать эту хранимую процедуру из PHP и входного массива. // нужен обходной путь.

+0

Возможный дубликат [PHP PDO: Могу ли я привязать массив к условию IN()?] (Http://stackoverflow.com/questions/920353/php-pdo-can-i-bind-an-array- to-an-in-condition) –

ответ

1

Вы просто должны быть умнее о своих звонках. Например, сохранение объектов кэшированного БД вокруг и тому подобное.

Не зная больше о вашем коде (ваш вопрос довольно искажен), то кажется, что если ваш запрос что-то вроде этого:

$query = "select abc from tblname where colname =" .$value; // run 10 times. 

Вам действительно нужно просто написать умный код:

$values = array(); // Now, populate this array. 
        // When you're done, run the query: 
$query = 'select abc from tblname where colname IN (\''.implode('\',\'', $values).'\')'; 

Как правило, мы называем это динамическим SQL и являемся основой для того, как обычно делаются сегодня. Хранимая процедура (или, основываясь на том, как я читаю ваш вопрос, хранимую функцию), иногда полезна, но несколько устарела как методология первого порядка для взаимодействия с SQL. Ребята из БД все еще иногда клянутся этим, но я думаю, что даже они довольно хорошо согласны с тем, что разумные запросы всегда лучше.

+0

wow .. gr8 решение .. y я не думаю об этом? – Saurabh

+0

WOW .. gr8 solution .. y я не думал об этом? Так как мне также нужно убедиться, что я получаю 1 результат для каждого из них, я могу считать нет. возвращаемых строк и сравните его с количеством элементов в массиве, и если его не равно i, будет отображаться ошибка. также, я могу применить предел к вышеуказанному запросу $ query = 'select abc from tblname где colname IN (\' '. Implode (' \ ', \' ', $ values).' \ ')' LIMIT , $ countArrayValues. ";" – Saurabh

+0

Да, вы можете делать всевозможные вещи, когда вы перебираете результирующий набор. Хотя ... Я не вижу причины добавлять LIMIT здесь, основываясь на том, что я думаю, что вы пытаетесь сделать с вашим кодом. Однако вы можете рассмотреть условие выхода в вашей логике синтаксического анализа. –

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