Esnek bir güncelleştirme sorgusu oluşturma

3 Cevap php

Ben bir esnek güncelleştirme sorgusu oluşturmak için çalışıyorum. Şimdi böyle bir şey var:

    		$lsQuery = "UPDATE `";
		$lsQuery .= $psTableName;
		$lsQuery .= " SET ";
		foreach($psValues as $lsKey => $lsValue)
		{
			$lsQuery .= $lsKey;
			$lsQuery .= " = '";
			$lsQuery .= $lsValue;
			$lsQuery .= "' AND ";
		}
		$lsQuery .= "` ";
		$lsQuery .= "WHERE ";
		if(isset($psWhere)){
			foreach($psWhere as $lsKey => $lsValue)
			{
				$lsQuery .= $lsKey;
				$lsQuery .= " = '";
				$lsQuery .= $lsValue;
				$lsQuery .= "' AND ";
			}
		}
		$lsQuery = substr($lsQuery,0,(strlen($lsQuery)-5));

Ben ekranda benim sorgu yazdırmak Ama ben gibi bir şey olsun:

GÜNCELLEME persons SET per_password = '2a6445462a09d0743d945ef270b9485b' AND WHERE per_email = 'bla@gmail.com'

Nasıl bu ekstra 'VE' kurtulabilirim?

3 Cevap

Eğer mevcut kod tutmak istiyorsanız.

$lsWhere = array();
foreach($psWhere as $lsKey => $lsValue)
{
    $lsWhere[] = $lsKey." = '".mysql_real_escape_string($lsValue)."'";
}
$lsQuery .= join(" AND ", $lsWhere);

Herhalde ile başlamak istiyorum:

function update($table, $set, $where) {
  $change = array();
  foreach ($set as $k => $v) {
    $change[] = $k . ' = ' . escape($v);
  }
  $conditions = array();
  foreach ($where as $k => $v) {
    $conditions[] = $k . ' = ' . escape($v);
  }
  $query = 'UPDATE ' . $table . ' SET ' .
    implode(', ', $change) . ' WHERE ' .
    implode(' AND ', $conditions);
  mysql_query($query);
  if (mysql_error()) {
    // deal with it how you wish
  }
}

function escape($v) {
  if (is_int($v)) {
    $v = intval($v);
  } else if (is_numeric($v)) {
    $v = floatval($v);
  } else if (is_null($v) || strtolower($v) == 'null') {
    $v = 'null';
  } else {
    $v = "'" . mysql_real_escape_string($v) . "'";
  }
  return $v;
}

Ben özellikle gurur duyuyorum bir çözüm değil, ama her zaman ekleyebilirsiniz $lsQuery .= 'someField=someField'.