Burada bir Yürüt / hazırlayın fonksiyonu dizi için yazdım budur. Bu elbette büyük bir DB nesne parçasıdır.
/**
* Prepares a query to be run, storing the data in $this->preparedTokens
* Use the following characters to indicate how the data is to be put into SQL statement
* ? -> escaped and quoted (with single quotes) before inserting
* ^ -> inserted as is
* & -> implodes the array escpaping each value
* @ -> implodes the array (no escaping)
*
* @param string $sql The SQL statement to prepare
*
* @return int The key of prepare sql query to be passed to $this->Execute()
*/
public function Prepare($sql) {
$simges = preg_split('/((?<!\\\)[@&?^])/', $sql, -1, PREG_SPLIT_DELIM_CAPTURE);
// loop through removing any escaped values
foreach ($simges as $key => $val) {
switch ($val) {
case '?' :
case '&' :
case '@' :
break;
default :
$simges[$key] = preg_replace('/\\\([@&?^])/', "\\1", $val);
break;
} // switch
} // foreach
$this->preparedTokens[] = $simges;
end($this->preparedTokens);
return key($this->preparedTokens);
} // function Prepare
/**
* Creates the SQL placing the data in the appropriate places and then runs the sql
*
* @param int $preparedKey The key of the prepared sql
* @param array $data The array of data to put into the query (the count of this array must match that of the prepared query)
*
* @return object false if the $preparedKey does not exist in $this->preparedTokens
* false if count of needed values in sql statement does not equal the number of keys in the data array
* otherwise, the result of $this->Query()
*/
public function Execute($preparedKey, $data) {
if (isset($this->preparedTokens[$preparedKey])) {
$simges = $this->preparedTokens[$preparedKey];
$query = '';
$dataKey = 0;
$count = 0;
// count the number of simges we have
$validTokens = array('?', '^', '&', '@');
foreach ($simges as $val) {
if (in_array($val, $validTokens)) {
++$count;
} // if
} // foreach
// check to ensure we have the same number of simges as data keys
if ($count != count($data)) {
trigger_error('Query Error: The number of values received in execute does not equal the number of values needed for the query', E_USER_ERROR);
return false;
} // if
// loop through the simges creating the sql statement
foreach ($simges as $val) {
switch ($val) {
case '?' :
$query .= "'" . $this->EscapeString($data[$dataKey++]) . "'";
break;
case '^' :
$query .= $data[$dataKey++];
break;
case '&' :
$query .= $this->ImplodeEscape($data[$dataKey++]);
break;
case '@' :
$query .= implode(',', $data[$dataKey++]);
break;
default :
$query .= $val;
break;
} // switch
} // foreach
return $this->Query($query);
} else {
return false;
} // if
} // function Execute
/**
* Runs $this->Prepare() then $this->Execute() for the sql and the data
* Use the following characters to indicate how the data is to be put into SQL statement
* ? -> escaped and quoted (with single quotes) before inserting
* ^ -> inserted as is
* & -> implodes the array escpaping each value
* @ -> implodes the array (no escaping)
*
* @param string $sql The SQL statement to prepare
* @param array $data The array of data to put into the query (the count of this array must match that of the prepared query)
*
* @return object returns value from $this->Query() if Execute was successful
* otherwise it'll be false
*/
public function PrepareExecute($sql, $data) {
return $this->Execute($this->Prepare($sql), $data);
} // function PrepareExecute
$this->Query()
MySQL deyimini çalıştırır ve sonra (kesilmiş açıklamada, ilk 6 karakterlere göre) ifadesi ne bağlı olarak farklı değerler döndürür:
- false başarısız olursa (kullanım $ this-> GetError () hata mesajı alıyorum)
- eğer başarılı INSERT, sonra insert id
- Başarılı DELETE veya UPDATE veya etkilenen satırların ardından numarayı DEĞİŞTİR eğer
- eğer başarılı SELECT veya herhangi diğer sorgu tipi, sonra Sorgu nesne
Bu sizin için ne arıyorsanız eğer emin değilim, ama yardımcı olabilir.
Bu söylemeyi unutmuşum, ama fikirlerin çoğu Armut :: DB sınıftan çıktı: http://pear.php.net/package/DB