<?xml version='1.0' encoding='UTF-8'?>
<rss version='2.0'>
	<channel>
		<title>cotonti.com : Работа с БД через передачу параметров массивом</title>
		<link>https://www.cotonti.com</link>
		<description>Neueste Themenbeiträge</description>
		<generator>Cotonti</generator>
		<language>en</language>
		<pubDate>Wed, 15 Apr 2026 05:25:32 -0000</pubDate>

		<item>
			<title>Macik</title>
			<description><![CDATA[<p>
	Да... Тогда проще остаться с «вечным» <span style="background-color:rgb(255,255,255);color:rgb(0,130,0);font-family:Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;font-size:13px;line-height:14px;text-align:left;">_prepare_itself = trur; </span>и поправить только <span style="color:rgb(68,68,68);font-family:sans-serif;font-size:13px;line-height:20px;text-align:left;background-color:rgb(238,238,238);"> «</span><span style="margin:0px;padding:0px;border:0px;font-size:13px;vertical-align:baseline;background-color:rgb(238,238,238);font-family:sans-serif;line-height:20px;text-align:left;color:rgb(218,165,32);"><strong style="margin:0px;padding:0px;border:0px;vertical-align:baseline;background-color:transparent;">_prepare</strong></span><span style="color:rgb(68,68,68);font-family:sans-serif;font-size:13px;line-height:20px;text-align:left;background-color:rgb(238,238,238);">».</span></p>
]]></description>
			<pubDate>Mi, 11 Jul 2012 20:45:45 -0000</pubDate>
			<link><![CDATA[https://www.cotonti.com/de/forums?m=posts&q=7006&d=0#post34938]]></link>
		</item>
		<item>
			<title>Trustmaster</title>
			<description><![CDATA[<p>
	Обходить конём, то есть сразу (ещё в query/insert/update/delete) вставлять массив в запрос и убирать его из списка параметров, после чего передавать полученный запрос и оставшиеся параметры далее по цепочке.</p>
<p>
	Главный вопрос - стоит ли оно того?</p>
]]></description>
			<pubDate>Mi, 11 Jul 2012 18:14:26 -0000</pubDate>
			<link><![CDATA[https://www.cotonti.com/de/forums?m=posts&q=7006&d=0#post34937]]></link>
		</item>
		<item>
			<title>Macik</title>
			<description><![CDATA[<p>
	[кому лень читать подробности - в конце страницы самая суть и вопрос]</p>
<p>
	Стараюсь использовать запросы в БД через <span style="color:#8b4513;"><strong>$cotDB-&gt;query($query,$parameters);</strong></span> Т.е. передавая параметры массивом, а не забивая их на прямую в текст запроса.</p>
<p>
	В общем проблем нет, но частенько надо передать как параметр список опций, например: </p>
<pre class="brush:sql;">
...
and user_region in ('ECE','RUS','USA')
...</pre>
<p>
	Естественно список может быть различной длины, и передать его простым параметром нельзя.</p>
<p>
	Для этих нужд немного расширил <span style="color:#008000;">database.php</span>, в частности функцию «<span style="color:#daa520;"><strong>_prepare</strong></span>» во внутреннем цикле:</p>
<p>
	было:</p>
<pre class="brush:php;first-line:165;">
				$placeholder = is_int($key) ? '?' : ':' . $key;
				$value = is_int($val) ? $val : $this-&gt;quote($val);
 				$query = preg_replace('`' . preg_quote($placeholder) . '`', $value, $query, 1);
</pre>
<p>
	стало (выделил добавленное):</p>
<pre class="brush:php;first-line:165;highlight: [166,170,172,173,175,177];">
				$placeholder = is_int($key) ? '?' : ':' . $key;
				if (!is_array($val))
				{
					$value = is_int($val) ? $val : $this-&gt;quote($val);
				} 
				else // added array processing 
				{ 
					$value = array();
					foreach ($val as $v)
					{
						$value[] = is_int($v) ? $v : $this-&gt;quote($v);
					}
					$value = implode(',',$value);
				}
 				$query = preg_replace('`' . preg_quote($placeholder) . '`', $value, $query, 1);
</pre>
<p>
	Т.е. просто добавил проверку, и если передается массив - формируем соотв. строку со значениями массива.</p>
<p>
	-------</p>
<p>
	Однако в <strong style="color:rgb(139,69,19);">$cotDB-&gt;query</strong> есть проверка <span style="color:#8b4513;">$this-&gt;_prepare_itself</span>  и если версия клиентской библиотеки =&gt; 5.1.0 вместо «<span style="color:rgb(218,165,32);"><strong>_prepare</strong></span>» будет вызван «<span style="color:rgb(218,165,32);"><strong>_</strong></span><span style="color:#daa520;">bindParams</span>», в котором используются родной <span style="color:#b22222;">PDOStatement::bindValue</span> и я ума не приложу как изменить <span style="color:rgb(218,165,32);"><strong>_</strong></span><span style="color:rgb(218,165,32);">bindParams</span> , аналогичным образом (как описано выше), что бы была возможность передавать в параметре списки значений.</p>
<p>
	 </p>
]]></description>
			<pubDate>Mi, 11 Jul 2012 10:00:30 -0000</pubDate>
			<link><![CDATA[https://www.cotonti.com/de/forums?m=posts&q=7006&d=0#post34934]]></link>
		</item>
	</channel>
</rss>