baseline 7.4 as-is produzione
This commit is contained in:
@@ -0,0 +1,815 @@
|
||||
<?php␍
|
||||
// version 2.31␍
|
||||
if (!class_exists("WA_MySQLi_Query")) {␍
|
||||
␍
|
||||
class WA_MySQLi_Query {␍
|
||||
public function __construct($conn, $mrt = "mrt") {␍
|
||||
$this->Action = "";␍
|
||||
$this->UseAction = "";␍
|
||||
$this->AffectedRows = 0;␍
|
||||
$this->Connection = $conn;␍
|
||||
$this->Debug = false;␍
|
||||
$this->DieOnError = true;␍
|
||||
$this->EncryptionAlgorithm = "blowfish";␍
|
||||
$this->EncryptionKey = "Change Me";␍
|
||||
$this->EncryptionMode = "cbc";␍
|
||||
$this->Error = "";␍
|
||||
$this->ErrorMessage = "There is an error in your SQL syntax.";␍
|
||||
$this->ErrorNo = 0;␍
|
||||
$this->FieldCount = 0;␍
|
||||
$this->Filter = "";␍
|
||||
$this->FilterValues = array();␍
|
||||
$this->ID = 0;␍
|
||||
$this->InsertID = 0;␍
|
||||
$this->JavascriptRedirect = false;␍
|
||||
$this->MRTField = $mrt;␍
|
||||
$this->NumRows = 0;␍
|
||||
$this->OnDuplicate = "";␍
|
||||
$this->ParamColumns = array();␍
|
||||
$this->ParamCount = 0;␍
|
||||
$this->ParamDefaults = array();␍
|
||||
$this->ParamTypes = array();␍
|
||||
$this->ParamValues = array();␍
|
||||
$this->Prepared = true;␍
|
||||
$this->RelationalColumns = array();␍
|
||||
$this->RelationalKeyColumn = false;␍
|
||||
$this->RelationalRows = array();␍
|
||||
$this->RelationalRowsFound = false;␍
|
||||
$this->RepeatConditions = array();␍
|
||||
$this->RepeatedParams = array();␍
|
||||
$this->RepeatIndex = 0;␍
|
||||
$this->SelectedResult = false;␍
|
||||
$this->Salt = false;␍
|
||||
$this->SaveAs = "";␍
|
||||
$this->Statement = "";␍
|
||||
$this->Table = "";␍
|
||||
}␍
|
||||
␍
|
||||
public function addFilter($filterColumn, $filterComparison, $filterType, $filterValue, $filterRepeat = false, $temporary = false) {␍
|
||||
if ($filterType == 'i') {␍
|
||||
if (strval(intval($filterValue)) != $filterValue) {␍
|
||||
if ($this->Debug) {␍
|
||||
die("incorrect INTEGER value: " . $filterValue);␍
|
||||
} else {␍
|
||||
die($this->ErrorMessage);␍
|
||||
}␍
|
||||
}␍
|
||||
}␍
|
||||
if ($filterType == 'd') {␍
|
||||
if (strval(floatval($filterValue)) != $filterValue) {␍
|
||||
if ($this->Debug) {␍
|
||||
die("incorrect DOUBLE value: " . $filterValue);␍
|
||||
} else {␍
|
||||
die($this->ErrorMessage);␍
|
||||
}␍
|
||||
}␍
|
||||
}␍
|
||||
$this->FilterValues[] = array($filterColumn, $filterComparison, $filterType, $filterValue, $filterRepeat, $temporary);␍
|
||||
}␍
|
||||
␍
|
||||
private function addRelationalFilters() {␍
|
||||
$filterValues = array();␍
|
||||
for ($x=0; $x<sizeof($this->ParamColumns); $x++) {␍
|
||||
if ($this->ParamColumns[$x][0] == $this->RelationalColumns[0] || $this->ParamColumns[$x][0] == $this->RelationalColumns[1]) {␍
|
||||
$filterValues[] = array($this->ParamColumns[$x][0], "=", $this->ParamTypes[$x], $this->ParamValues[$x], false, true);␍
|
||||
}␍
|
||||
}␍
|
||||
$this->FilterValues = $filterValues;␍
|
||||
}␍
|
||||
␍
|
||||
public function addRelationship($relationalParentColumn, $relationalChildColumn) {␍
|
||||
$this->RelationalColumns = array($relationalParentColumn, $relationalChildColumn);␍
|
||||
}␍
|
||||
␍
|
||||
private function addQuerystring($url) {␍
|
||||
if (empty($_SERVER['QUERY_STRING'])) return $url;␍
|
||||
if (strpos($url,"?")!==false) return $url . "&" . $_SERVER['QUERY_STRING'];␍
|
||||
return $url . "?" . $_SERVER['QUERY_STRING'];␍
|
||||
}␍
|
||||
␍
|
||||
public function bindColumn($paramColumn, $paramType, $paramValue, $paramDefault, $mrtParam = false) {␍
|
||||
if ($this->isBound($paramColumn)) return;␍
|
||||
if ($mrtParam && !is_array($paramValue)) {␍
|
||||
$paramValue = array();␍
|
||||
$toCheck = isset($_POST[$this->MRTField])?$_POST[$this->MRTField]:array();␍
|
||||
for ($x=0; $x<sizeof($toCheck); $x++) {␍
|
||||
if (isset($_POST[$mrtParam."_".$toCheck[$x]])) {␍
|
||||
$paramValue[] = $_POST[$mrtParam."_".$toCheck[$x]];␍
|
||||
} else {␍
|
||||
$paramValue[] = "";␍
|
||||
}␍
|
||||
}␍
|
||||
}␍
|
||||
if (is_array($paramValue) && sizeof($paramValue) > 0) {␍
|
||||
$this->RepeatedParams[] = array(sizeof($this->ParamColumns), $paramValue, false);␍
|
||||
$paramValue = $paramValue[0];␍
|
||||
}␍
|
||||
$this->ParamColumns[] = array($paramColumn, false);␍
|
||||
if ($paramType == "c") $paramType = "z";␍
|
||||
$this->bindParam($paramType, $paramValue, $paramDefault);␍
|
||||
}␍
|
||||
␍
|
||||
private function bindDefault($paramType,$paramValue,$paramDefault) {␍
|
||||
if ($paramValue === "" || $paramValue === NULL) {␍
|
||||
if (($paramType == "d" || $paramType == "i") && $paramDefault == "WA_BLANK") $paramDefault = "WA_ZERO";␍
|
||||
switch ($paramDefault) {␍
|
||||
case "WA_BLANK":␍
|
||||
case "WA_IGNORE":␍
|
||||
case "WA_SKIP":␍
|
||||
case "WA_DEFAULT":␍
|
||||
case "WA_TIMESTAMP":␍
|
||||
$paramValue = "";␍
|
||||
break;␍
|
||||
case "WA_NULL":␍
|
||||
$paramValue = null;␍
|
||||
break;␍
|
||||
case "WA_CURRENT_TIMESTAMP":␍
|
||||
$paramValue = date("Y-m-d H:i:s");␍
|
||||
break;␍
|
||||
case "WA_ZERO":␍
|
||||
$paramValue = "0";␍
|
||||
break;␍
|
||||
case "WA_NO":␍
|
||||
$paramValue = "N";␍
|
||||
break;␍
|
||||
default:␍
|
||||
$paramValue = $paramDefault;␍
|
||||
}␍
|
||||
}␍
|
||||
if ($paramType == "t") {␍
|
||||
if ($paramValue) {␍
|
||||
$hasTime = strpos($paramValue," ") !== false;␍
|
||||
$paramValue = strtotime($paramValue);␍
|
||||
if ($hasTime) {␍
|
||||
$paramValue = date('Y-m-d H:i:s',$paramValue);␍
|
||||
} else {␍
|
||||
$paramValue = date('Y-m-d',$paramValue);␍
|
||||
}␍
|
||||
} else {␍
|
||||
$paramValue = null;␍
|
||||
}␍
|
||||
} else if ($paramType == "c") {␍
|
||||
$paramValue = "%" . $paramValue . "%";␍
|
||||
} else if ($paramType == "b") {␍
|
||||
$paramValue = $paramValue . "%";␍
|
||||
} else if ($paramType == "e") {␍
|
||||
$paramValue = "%" . $paramValue;␍
|
||||
} else if ($paramType == "y") {␍
|
||||
if ($paramValue) {␍
|
||||
$paramValue = "Y";␍
|
||||
} else {␍
|
||||
$paramValue = "N";␍
|
||||
}␍
|
||||
} else if ($paramType == "n" || $paramType == "z") {␍
|
||||
if ($paramValue) {␍
|
||||
$paramValue = ($paramType == "n")?"-1":"1";␍
|
||||
} else {␍
|
||||
$paramValue = "0";␍
|
||||
}␍
|
||||
} ␍
|
||||
return $paramValue;␍
|
||||
}␍
|
||||
␍
|
||||
public function bindParam($paramType,$paramValue,$paramDefault="",$paramPosition=false) {␍
|
||||
$paramArray = array($paramValue);␍
|
||||
$isList = false;␍
|
||||
if (strpos($paramType,"l")) {␍
|
||||
$paramType = substr($paramType,0,1);␍
|
||||
$paramArray = preg_split("/\s*\,\s*/", $paramValue);␍
|
||||
$isList = true;␍
|
||||
}␍
|
||||
for ($x=0; $x<sizeof($paramArray); $x++) {␍
|
||||
$paramValue = $paramArray[$x];␍
|
||||
$paramValue = $this->bindDefault($paramType,$paramValue,$paramDefault);␍
|
||||
if (($isList || sizeof($paramArray) > 1) && $x == 0) {␍
|
||||
$sqlParts = explode("?",$this->Statement);␍
|
||||
if (!preg_match("/\(\s*$/",$sqlParts[sizeof($this->ParamValues)]) && !preg_match("/^\s*\)/",$sqlParts[sizeof($this->ParamValues)+1])) {␍
|
||||
$sqlParts[sizeof($this->ParamValues)] = $sqlParts[sizeof($this->ParamValues)] . "(";␍
|
||||
$sqlParts[sizeof($this->ParamValues)+1] = ")" . $sqlParts[sizeof($this->ParamValues)+1];␍
|
||||
}␍
|
||||
$this->Statement = implode("?",$sqlParts);␍
|
||||
}␍
|
||||
if ($x>0) {␍
|
||||
$sqlParts = explode("?",$this->Statement);␍
|
||||
$sqlParts[sizeof($this->ParamValues)] = ", ?" . $sqlParts[sizeof($this->ParamValues)];␍
|
||||
$this->Statement = implode("?",$sqlParts);␍
|
||||
}␍
|
||||
if ($paramPosition == false) {␍
|
||||
$this->ParamTypes[] = $paramType; ␍
|
||||
$this->ParamValues[] = $paramValue;␍
|
||||
$this->ParamDefaults[] = $paramDefault;␍
|
||||
} else {␍
|
||||
array_splice($this->ParamTypes, $paramPosition, 0, $paramType);␍
|
||||
array_splice($this->ParamValues, $paramPosition, 0, $paramValue);␍
|
||||
array_splice($this->ParamDefaults, $paramPosition, 0, $paramDefault);␍
|
||||
}␍
|
||||
}␍
|
||||
}␍
|
||||
␍
|
||||
public function checkRepeatConditions() {␍
|
||||
for ($x=0; $x<sizeof($this->RepeatConditions); $x++) {␍
|
||||
if (!(isset($_POST[$this->RepeatConditions[$x] . $this->RepeatIndex]) || isset($_GET[$this->RepeatConditions[$x] . $this->RepeatIndex]))) return false;␍
|
||||
}␍
|
||||
return true;␍
|
||||
}␍
|
||||
␍
|
||||
private function clearRepeatedFilters() {␍
|
||||
for ($x=sizeof($this->RepeatedParams)-1; $x>=0; $x--) {␍
|
||||
if ($this->RepeatedParams[$x][2]) {␍
|
||||
array_splice($this->ParamValues, $this->RepeatedParams[$x][0], 1);␍
|
||||
array_splice($this->ParamTypes, $this->RepeatedParams[$x][0], 1);␍
|
||||
array_splice($this->ParamDefaults, $this->RepeatedParams[$x][0], 1);␍
|
||||
array_splice($this->RepeatedParams, $x, 1);␍
|
||||
}␍
|
||||
}␍
|
||||
}␍
|
||||
␍
|
||||
private function clearTemporaryFilters() {␍
|
||||
for ($x=sizeof($this->FilterValues)-1; $x>=0; $x--) {␍
|
||||
if ($this->FilterValues[$x][5]) {␍
|
||||
array_pop($this->ParamValues);␍
|
||||
array_pop($this->ParamTypes);␍
|
||||
array_pop($this->ParamDefaults);␍
|
||||
array_pop($this->FilterValues);␍
|
||||
}␍
|
||||
}␍
|
||||
}␍
|
||||
␍
|
||||
private function clearTemporaryColumns() {␍
|
||||
for ($x=sizeof($this->ParamColumns)-1; $x>=0; $x--) {␍
|
||||
if ($this->ParamColumns[$x][1]) {␍
|
||||
array_splice($this->ParamColumns, $x, 1);␍
|
||||
array_splice($this->ParamTypes, $x, 1);␍
|
||||
array_splice($this->ParamDefaults, $x, 1);␍
|
||||
array_splice($this->ParamValues, $x, 1);␍
|
||||
}␍
|
||||
}␍
|
||||
}␍
|
||||
␍
|
||||
public function createStatement() {␍
|
||||
$this->UseAction = $this->Action;␍
|
||||
if (strtolower($this->UseAction) == "relational") {␍
|
||||
if (!$this->RelationalRowsFound) {␍
|
||||
$this->RelationalRowsFound = true;␍
|
||||
if (!class_exists("WA_MySQLi_RS")) require(dirname(__FILE__) . "/" . "rsobj.php");␍
|
||||
$KeyRS = new WA_MySQLi_RS("KeyRS",$this->Connection,0);␍
|
||||
$KeyRS->setQuery("SHOW KEYS FROM " . $this->Table ." WHERE Key_name = 'PRIMARY'");␍
|
||||
$KeyRS->execute();␍
|
||||
$this->RelationalKeyColumn = $KeyRS->getColumnVal("Column_name");␍
|
||||
␍
|
||||
if (!$this->RelationalKeyColumn) {␍
|
||||
$ReplaceDelete = new WA_MySQLi_Query($this->Connection);␍
|
||||
$ReplaceDelete->setQuery("DELETE FROM " . $this->Table);␍
|
||||
if (sizeof($ReplaceDelete->FilterValues) >= 1) {␍
|
||||
$ReplaceDelete->setFilter();␍
|
||||
$ReplaceDelete->execute(); ␍
|
||||
}␍
|
||||
} else {␍
|
||||
if (!$this->SelectedResult) {␍
|
||||
$RelationalRS = new WA_MySQLi_RS("RelationalRS",$this->Connection,0);␍
|
||||
$RelationalRS->setQuery("SELECT " . $this->RelationalColumns[1] . ", " .$this->RelationalKeyColumn. " FROM " . $this->Table);␍
|
||||
$RelationalRS->FilterValues = array($this->getParentFilterFromRelational());␍
|
||||
$RelationalRS->setFilter();␍
|
||||
$RelationalRS->execute();␍
|
||||
$this->SelectedResult = $RelationalRS;␍
|
||||
}␍
|
||||
for ($x=0; $x<sizeof($this->SelectedResult->Results); $x++) {␍
|
||||
$this->RelationalRows[] = array($this->SelectedResult->Results[$x][$this->RelationalColumns[1]], false, $this->SelectedResult->Results[$x][$this->RelationalKeyColumn]);␍
|
||||
}␍
|
||||
}␍
|
||||
}␍
|
||||
$relationalChildValue = -1;␍
|
||||
for ($x=0; $x<sizeof($this->ParamColumns); $x++) {␍
|
||||
if ($this->ParamColumns[$x][0] == $this->RelationalColumns[1]) {␍
|
||||
if (empty($this->ParamValues[$x])) {␍
|
||||
$this->Statement = "";␍
|
||||
return;␍
|
||||
}␍
|
||||
$relationalChildValue = $this->ParamValues[$x];␍
|
||||
}␍
|
||||
if ($this->ParamColumns[$x][0] == $this->RelationalColumns[0] && empty($this->ParamValues[$x])) {␍
|
||||
$this->Statement = "";␍
|
||||
return;␍
|
||||
}␍
|
||||
}␍
|
||||
$childFound = false;␍
|
||||
for ($x=0; $x<sizeof($this->RelationalRows); $x++) {␍
|
||||
if ($relationalChildValue == $this->RelationalRows[$x][0]) {␍
|
||||
$this->RelationalRows[$x][1] = true;␍
|
||||
$childFound = true;␍
|
||||
break;␍
|
||||
}␍
|
||||
}␍
|
||||
if ($childFound) {␍
|
||||
$this->addRelationalFilters();␍
|
||||
$this->UseAction = "update";␍
|
||||
} else {␍
|
||||
$this->UseAction = "insert";␍
|
||||
}␍
|
||||
}␍
|
||||
if (strtolower($this->UseAction) == "conditional") {␍
|
||||
if (sizeof($this->FilterValues) > 0) {␍
|
||||
if (!class_exists("WA_MySQLi_RS")) require(dirname(__FILE__) . "/" . "rsobj.php");␍
|
||||
$ConditionalRS = new WA_MySQLi_RS("ConditionalRS",$this->Connection,1);␍
|
||||
$ConditionalRS->setQuery("SELECT Count(*) AS RowCount FROM " . $this->Table);␍
|
||||
$ConditionalRS->FilterValues = $this->FilterValues;␍
|
||||
$ConditionalRS->setFilter();␍
|
||||
$ConditionalRS->execute();␍
|
||||
if ($ConditionalRS->getColumnVal("RowCount")) {␍
|
||||
$this->UseAction = "update";␍
|
||||
} else {␍
|
||||
$this->FilterValues = array();␍
|
||||
$this->UseAction = "insert";␍
|
||||
}␍
|
||||
} else {␍
|
||||
$this->UseAction = "insert";␍
|
||||
}␍
|
||||
}␍
|
||||
if (strtolower($this->UseAction) == "replace") {␍
|
||||
if (sizeof($this->FilterValues) > 0) { ␍
|
||||
$ReplaceDelete = new WA_MySQLi_Query($this->Connection);␍
|
||||
$ReplaceDelete->setQuery("DELETE FROM " . $this->Table);␍
|
||||
$ReplaceDelete->FilterValues = $this->FilterValues;␍
|
||||
$ReplaceDelete->setFilter();␍
|
||||
$ReplaceDelete->execute();␍
|
||||
}␍
|
||||
$this->UseAction = "insert";␍
|
||||
}␍
|
||||
switch (strtolower($this->UseAction)) {␍
|
||||
case "update":␍
|
||||
$Columns = "";␍
|
||||
$this->Statement = "UPDATE " . $this->Table . " SET ";␍
|
||||
$oneAdded = false;␍
|
||||
for ($x=0; $x<sizeof($this->ParamColumns); $x++) {␍
|
||||
if (!(($this->ParamDefaults[$x] == "WA_IGNORE" || $this->ParamDefaults[$x] == "WA_SKIP") && ($this->ParamValues[$x] === "" || $this->ParamValues[$x] === false || $this->ParamValues[$x] === null))) {␍
|
||||
if ($Columns != "") $Columns .= ", ";␍
|
||||
$columnRef = $this->ParamColumns[$x][0];␍
|
||||
if (strpos($columnRef,"`") == false && strpos($columnRef,"(") == false) $columnRef = '`'.$columnRef.'`';␍
|
||||
$colPlaceholder = "?";␍
|
||||
if ($this->ParamDefaults[$x] == "WA_DEFAULT" && ($this->ParamValues[$x] === "" || $this->ParamValues[$x] === null || $this->ParamValues[$x] === false)) $colPlaceholder = "DEFAULT";␍
|
||||
if ($this->ParamDefaults[$x] == "WA_TIMESTAMP" && $this->ParamValues[$x] == "") $colPlaceholder = "SYSDATE()";␍
|
||||
$Columns .= $columnRef . " = " . $colPlaceholder;␍
|
||||
$oneAdded = true;␍
|
||||
}␍
|
||||
}␍
|
||||
if (!$oneAdded) {␍
|
||||
$this->Statement = false;␍
|
||||
return;␍
|
||||
}␍
|
||||
$this->Statement .= $Columns;␍
|
||||
break;␍
|
||||
case "insert":␍
|
||||
$Columns = "";␍
|
||||
$Values = "";␍
|
||||
$this->Statement = "INSERT ".($this->OnDuplicate == "ignore"?"IGNORE":"INTO")." " . $this->Table . " (";␍
|
||||
$oneAdded = false;␍
|
||||
$onDuplicate = "";␍
|
||||
for ($x=0; $x<sizeof($this->ParamColumns); $x++) {␍
|
||||
if (!(($this->ParamDefaults[$x] == "WA_IGNORE" || $this->ParamDefaults[$x] == "WA_SKIP") && ($this->ParamValues[$x] === "" || $this->ParamValues[$x] === null || $this->ParamValues[$x] === false))) {␍
|
||||
if ($Columns != "") {␍
|
||||
$Columns .= ", ";␍
|
||||
$Values .= ", ";␍
|
||||
}␍
|
||||
$columnRef = $this->ParamColumns[$x][0];␍
|
||||
if (strpos($columnRef,"`") == false && strpos($columnRef,"(") == false) $columnRef = '`'.$columnRef.'`';␍
|
||||
$Columns .= $columnRef;␍
|
||||
if ($this->ParamDefaults[$x] == "WA_DEFAULT" && ($this->ParamValues[$x] === "" || $this->ParamValues[$x] === null || $this->ParamValues[$x] === false)) {␍
|
||||
$addValue = "DEFAULT";␍
|
||||
} else if ($this->ParamDefaults[$x] == "WA_TIMESTAMP") {␍
|
||||
$addValue = "SYSDATE()";␍
|
||||
} else {␍
|
||||
$addValue = "?";␍
|
||||
}␍
|
||||
$Values .= $addValue;␍
|
||||
if ($this->OnDuplicate == "update") {␍
|
||||
if ($onDuplicate != "") $onDuplicate .= ", ";␍
|
||||
$onDuplicate .= $columnRef ."=" . $addValue;␍
|
||||
}␍
|
||||
$oneAdded = true;␍
|
||||
}␍
|
||||
}␍
|
||||
if (!$oneAdded) {␍
|
||||
$this->Statement = false;␍
|
||||
return;␍
|
||||
}␍
|
||||
$this->Statement .= $Columns . ") VALUES (" . $Values . ")";␍
|
||||
if ($this->OnDuplicate == "update") {␍
|
||||
$this->ParamTypes= array_merge($this->ParamTypes, $this->ParamTypes); ␍
|
||||
$this->ParamValues = array_merge($this->ParamValues, $this->ParamValues); ␍
|
||||
$this->ParamDefaults = array_merge($this->ParamDefaults, $this->ParamDefaults); ␍
|
||||
$onDuplicate = " ON DUPLICATE KEY UPDATE " . $onDuplicate;␍
|
||||
}␍
|
||||
$this->Statement .= $onDuplicate;␍
|
||||
break;␍
|
||||
case "delete":␍
|
||||
$this->Statement = "DELETE FROM " . $this->Table;␍
|
||||
if (sizeof($this->ParamColumns) > 0) $this->Statement .= " WHERE ";␍
|
||||
for ($x=0; $x<sizeof($this->ParamColumns); $x++) {␍
|
||||
if ($x!=0) $this->Statement .= " AND ";␍
|
||||
$columnRef = $this->ParamColumns[$x][0];␍
|
||||
if (strpos($columnRef,"`") == false && strpos($columnRef,"(") == false) $columnRef = '`'.$columnRef.'`';␍
|
||||
$colPlaceholder = "?";␍
|
||||
$this->Statement .= $columnRef . " = " . $colPlaceholder;␍
|
||||
}␍
|
||||
break;␍
|
||||
}␍
|
||||
$this->setFilter();␍
|
||||
}␍
|
||||
␍
|
||||
public function debugSQL() {␍
|
||||
$statement = $this->Statement;␍
|
||||
$paramLen = 1;␍
|
||||
for ($x=0; $x<sizeof($this->ParamValues); $x++) {␍
|
||||
if (is_array($this->ParamValues[$x])) $paramLen = sizeof($this->ParamValues[$x]);␍
|
||||
}␍
|
||||
for ($x=0; $x<$paramLen; $x++) {␍
|
||||
$params = ($this->getParams($x));␍
|
||||
$paramTypes = $params[0];␍
|
||||
$startStatement = "";␍
|
||||
$endStatement = $statement;␍
|
||||
for ($x=0; $x<strlen($paramTypes); $x++) {␍
|
||||
$pos = strpos($endStatement, "?");␍
|
||||
if ($pos !== false) {␍
|
||||
$replace = $this->getSQLValue($params[$x+1],$paramTypes[$x],true);␍
|
||||
$startStatement .= substr($endStatement,0,$pos) . $replace;␍
|
||||
$endStatement = substr($endStatement, $pos + 1);␍
|
||||
}␍
|
||||
}␍
|
||||
$statement = $startStatement . $endStatement;␍
|
||||
}␍
|
||||
$statement = $startStatement . $endStatement;␍
|
||||
return $statement;␍
|
||||
}␍
|
||||
␍
|
||||
public function execute($allowTableOverwrite=false) {␍
|
||||
$shouldRun = true;␍
|
||||
$startStatement = $this->Statement;␍
|
||||
while ($this->incrementRepeat()) {␍
|
||||
if (sizeof($this->RepeatedParams) > 0) {␍
|
||||
if (!$this->checkRepeatConditions()) {␍
|
||||
continue;␍
|
||||
}␍
|
||||
$this->clearRepeatedFilters();␍
|
||||
$this->resetRepeated();␍
|
||||
}␍
|
||||
if (!$startStatement) {␍
|
||||
$this->clearTemporaryColumns();␍
|
||||
$this->createStatement();␍
|
||||
if (!$this->Statement) continue;␍
|
||||
if ((strtolower($this->UseAction) == "delete" || strtolower($this->UseAction) == "update") && strpos($this->Statement," WHERE ") === false && !$allowTableOverwrite) {␍
|
||||
continue;␍
|
||||
}␍
|
||||
}␍
|
||||
if (in_array("WA_SKIP",$this->ParamValues)) continue;␍
|
||||
if (!$this->Prepared) {␍
|
||||
$statement = $this->Statement;␍
|
||||
if (sizeof($this->ParamValues) > 0) {␍
|
||||
$paramLen = 1;␍
|
||||
for ($x=0; $x<sizeof($this->ParamValues); $x++) {␍
|
||||
if (is_array($this->ParamValues[$x])) $paramLen = sizeof($this->ParamValues[$x]);␍
|
||||
}␍
|
||||
for ($x=0; $x<$paramLen; $x++) {␍
|
||||
$params = ($this->getParams($x));␍
|
||||
$paramTypes = $params[0];␍
|
||||
$startStatement = "";␍
|
||||
$endStatement = $statement;␍
|
||||
for ($x=0; $x<strlen($paramTypes); $x++) {␍
|
||||
$pos = strpos($endStatement, "?");␍
|
||||
if ($pos !== false) {␍
|
||||
$replace = $this->getSQLValue($params[$x+1],$paramTypes[$x]);␍
|
||||
$startStatement .= substr($endStatement,0,$pos) . $replace;␍
|
||||
$endStatement = substr($endStatement, $pos + 1);␍
|
||||
}␍
|
||||
}␍
|
||||
$statement = $startStatement . $endStatement;␍
|
||||
}␍
|
||||
}␍
|
||||
$query = $this->Connection->query($statement);␍
|
||||
if ($query == false) {␍
|
||||
if ($this->Debug) {␍
|
||||
die($this->debugSQL() . "<BR><BR>" . mysqli_error($this->Connection));␍
|
||||
} else {␍
|
||||
if ($this->DieOnError) {␍
|
||||
die($this->ErrorMessage);␍
|
||||
} else {␍
|
||||
$this->Error = $this->debugSQL() . "<BR><BR>" . mysqli_error($this->Connection);␍
|
||||
}␍
|
||||
}␍
|
||||
} else {␍
|
||||
$query = false;␍
|
||||
}␍
|
||||
} else {␍
|
||||
if (sizeof($this->ParamTypes) && strpos($this->Statement,"?") !== false) {␍
|
||||
$query = $this->Connection->Prepare($this->Statement);␍
|
||||
if ($query == false) {␍
|
||||
if ($this->Debug) {␍
|
||||
die($this->debugSQL() . "<BR><BR>" . mysqli_error($this->Connection));␍
|
||||
} else {␍
|
||||
if ($this->DieOnError) {␍
|
||||
die($this->ErrorMessage);␍
|
||||
} else {␍
|
||||
$this->Error = $this->debugSQL() . "<BR><BR>" . mysqli_error($this->Connection);␍
|
||||
}␍
|
||||
}␍
|
||||
}␍
|
||||
$paramLen = 1;␍
|
||||
for ($x=0; $x<sizeof($this->ParamValues); $x++) {␍
|
||||
if (is_array($this->ParamValues[$x])) $paramLen = sizeof($this->ParamValues[$x]);␍
|
||||
}␍
|
||||
for ($x=0; $x<$paramLen; $x++) {␍
|
||||
call_user_func_array(array($query, "bind_param"),$this->paramRefs($this->getParams($x)));␍
|
||||
$query->execute();␍
|
||||
if ($query->errno) {␍
|
||||
if ($this->Debug) {␍
|
||||
die($this->debugSQL() . "<BR><BR>" . $query->error);␍
|
||||
} else {␍
|
||||
if ($this->DieOnError) {␍
|
||||
die($this->ErrorMessage);␍
|
||||
} else {␍
|
||||
$this->Error = $this->debugSQL() . "<BR><BR>" . mysqli_error($this->Connection);␍
|
||||
}␍
|
||||
}␍
|
||||
}␍
|
||||
}␍
|
||||
$this->clearTemporaryFilters();␍
|
||||
} else {␍
|
||||
$query = $this->Connection->query($this->Statement);␍
|
||||
if ($query == false) {␍
|
||||
if ($this->Debug) {␍
|
||||
die($this->debugSQL() . "<BR><BR>" . mysqli_error($this->Connection));␍
|
||||
} else {␍
|
||||
if ($this->DieOnError) {␍
|
||||
die($this->ErrorMessage);␍
|
||||
} else {␍
|
||||
$this->Error = $this->debugSQL() . "<BR><BR>" . mysqli_error($this->Connection);␍
|
||||
}␍
|
||||
}␍
|
||||
} else {␍
|
||||
$query = false;␍
|
||||
}␍
|
||||
}␍
|
||||
}␍
|
||||
if ($this->SaveAs != "" && strtolower($this->UseAction) == "insert") {␍
|
||||
@session_start();␍
|
||||
$_SESSION[$this->SaveAs] = $query?$query->insert_id:$this->Connection->insert_id;␍
|
||||
}␍
|
||||
$this->AffectedRows = $query?$query->affected_rows:$this->Connection->affected_rows;␍
|
||||
$this->AffectedRows = ($this->AffectedRows===-1)?0:$this->AffectedRows;␍
|
||||
$this->InsertID = $query?$query->insert_id:$this->Connection->insert_id;␍
|
||||
$this->NumRows = $query?$query->num_rows:0;␍
|
||||
$this->ParamCount = $query?$query->param_count:0;␍
|
||||
$this->FieldCount = $query?$query->field_count:$this->Connection->field_count;␍
|
||||
if (!$this->Error) $this->Error = $query?$query->error:$this->Connection->error;␍
|
||||
$this->ErrorNo = $query?$query->errno:$this->Connection->errno;␍
|
||||
$this->ID = $query?$query->id:$this->Connection->thread_id;␍
|
||||
if ($query && method_exists($query,"close")) $query->close();␍
|
||||
}␍
|
||||
␍
|
||||
␍
|
||||
if (sizeof($this->RelationalRows)) { ␍
|
||||
$this->addRelationalFilters();␍
|
||||
for ($x=0; $x<sizeof($this->RelationalRows); $x++) {␍
|
||||
if ($this->RelationalRows[$x][1] == false) {␍
|
||||
$CleanUpQuery = new WA_MySQLi_Query($this->Connection);␍
|
||||
$CleanUpQuery->Statement = "delete FROM " . $this->Table . " WHERE " . $this->RelationalKeyColumn . " = " . $this->RelationalRows[$x][2];␍
|
||||
$CleanUpQuery->execute();␍
|
||||
}␍
|
||||
}␍
|
||||
}␍
|
||||
}␍
|
||||
␍
|
||||
private function getChildFilterFromRelational($row) {␍
|
||||
for ($x=0; $x<sizeof($this->ParamColumns); $x++) {␍
|
||||
if ($this->ParamColumns[$x][0] == $this->RelationalColumns[1]) {␍
|
||||
return array($this->RelationalColumns[1], "=", $this->ParamTypes[$x], $this->RelationalRows[$row][0], false, true);␍
|
||||
}␍
|
||||
}␍
|
||||
return array($this->RelationalColumns[0], "=", "i", "-1", false, true);␍
|
||||
}␍
|
||||
␍
|
||||
public function getSalt() {␍
|
||||
$isStrong = false;␍
|
||||
$this->Salt = base64_encode(openssl_random_pseudo_bytes(openssl_cipher_iv_length($this->EncryptionAlgorithm),$isStrong));␍
|
||||
}␍
|
||||
␍
|
||||
public function getEncryptedVal($val) {␍
|
||||
$retVal = $val;␍
|
||||
$salt = "";␍
|
||||
if ($this->Salt) $salt = base64_decode($this->Salt);␍
|
||||
if ($retVal !== "") {␍
|
||||
$retVal = base64_encode(openssl_encrypt($val,$this->EncryptionAlgorithm,$this->EncryptionKey, OPENSSL_RAW_DATA, $salt));␍
|
||||
}␍
|
||||
␍
|
||||
return $retVal; ␍
|
||||
}␍
|
||||
␍
|
||||
private function getParentFilterFromRelational() {␍
|
||||
for ($x=0; $x<sizeof($this->ParamColumns); $x++) {␍
|
||||
if ($this->ParamColumns[$x][0] == $this->RelationalColumns[0]) {␍
|
||||
return array($this->RelationalColumns[0], "=", $this->ParamTypes[$x], $this->ParamValues[$x], false, true);␍
|
||||
}␍
|
||||
}␍
|
||||
return array($this->RelationalColumns[0], "=", "i", "-1", false, true);␍
|
||||
}␍
|
||||
␍
|
||||
private function getParams($index) {␍
|
||||
$useParams = array();␍
|
||||
$useTypes = array();␍
|
||||
for ($x=0; $x<sizeof($this->ParamValues); $x++) {␍
|
||||
$paramVal = is_array($this->ParamValues[$x])?$this->ParamValues[$x][$index]:$this->ParamValues[$x];␍
|
||||
if (!(($paramVal === "" || $paramVal === null || $paramVal === false) && ($this->ParamDefaults[$x] == "WA_DEFAULT" || $this->ParamDefaults[$x] == "WA_IGNORE" || $this->ParamDefaults[$x] == "WA_SKIP" || $this->ParamDefaults[$x] == "WA_TIMESTAMP"))) {␍
|
||||
$useParams[] = $paramVal;␍
|
||||
$typesVal = $this->ParamTypes[$x];␍
|
||||
if ($typesVal == "t" || $typesVal == "c" || $typesVal == "b" || $typesVal == "e" || $typesVal == "y") {␍
|
||||
$typesVal = "s";␍
|
||||
} else if ($typesVal == "n" || $typesVal == "z") {␍
|
||||
$typesVal = "i";␍
|
||||
} else if ($typesVal != "i" && $typesVal != "d" && $typesVal != "s" && $typesVal != "b") {␍
|
||||
$typesVal = "s";␍
|
||||
}␍
|
||||
$useTypes[] = $typesVal;␍
|
||||
}␍
|
||||
}␍
|
||||
return array_merge(array(implode("",$useTypes)), $useParams);␍
|
||||
}␍
|
||||
␍
|
||||
public function getSelected() {␍
|
||||
if (!$this->SelectedResult) {␍
|
||||
$RelationalRS = new WA_MySQLi_RS("RelationalRS",$this->Connection,0);␍
|
||||
$RelationalRS->setQuery("SELECT " . $this->RelationalColumns[1] . ($this->RelationalKeyColumn?", " .$this->RelationalKeyColumn:""). " FROM " . $this->Table);␍
|
||||
$RelationalRS->FilterValues = array($this->getParentFilterFromRelational());␍
|
||||
$RelationalRS->setFilter();␍
|
||||
$RelationalRS->execute();␍
|
||||
$this->SelectedResult = $RelationalRS;␍
|
||||
}␍
|
||||
return $this->SelectedResult->getColumnArray($this->RelationalColumns[1]);␍
|
||||
}␍
|
||||
␍
|
||||
public function getSQLValue($val,$type,$forDebug=false) {␍
|
||||
if (is_null($val)) {␍
|
||||
$retval = "NULL";␍
|
||||
} else if ($type == 'i') {␍
|
||||
if (!$forDebug && strval(intval($val)) != $val) {␍
|
||||
if ($this->Debug) {␍
|
||||
die($this->debugSQL() . "<BR><BR>" . "Truncated incorrect INTEGER value: " . $val);␍
|
||||
} else {␍
|
||||
die($this->ErrorMessage);␍
|
||||
}␍
|
||||
}␍
|
||||
$retval = intval($val);␍
|
||||
} else if ($type == 'd') {␍
|
||||
if (!$forDebug && strval(floatval($val)) != $val) {␍
|
||||
if ($this->Debug) {␍
|
||||
die($this->debugSQL() . "<BR><BR>" . "Truncated incorrect DOUBLE value: " . $val);␍
|
||||
} else {␍
|
||||
die($this->ErrorMessage);␍
|
||||
}␍
|
||||
}␍
|
||||
$retval = floatval($val);␍
|
||||
} else {␍
|
||||
$retval = "'" . mysqli_real_escape_string($this->Connection,$val) . "'";␍
|
||||
}␍
|
||||
return $retval;␍
|
||||
}␍
|
||||
␍
|
||||
private function incrementRepeat() {␍
|
||||
$this->RepeatIndex++;␍
|
||||
$totalRepeats = 1;␍
|
||||
// check action␍
|
||||
if ($this->Action == "relational" && sizeof($this->RepeatedParams)>0) {␍
|
||||
$totalRepeats = sizeof($this->RepeatedParams[0][1]);␍
|
||||
} else {␍
|
||||
for ($x=0; $x<sizeof($this->RepeatedParams); $x++) {␍
|
||||
$totalRepeats *= sizeof($this->RepeatedParams[$x][1]);␍
|
||||
}␍
|
||||
}␍
|
||||
return ($this->RepeatIndex <= $totalRepeats);␍
|
||||
}␍
|
||||
␍
|
||||
public function isBound($column) {␍
|
||||
for ($x=0; $x<sizeof($this->ParamColumns); $x++) {␍
|
||||
if ($this->ParamColumns[$x][0] == $column) return true;␍
|
||||
}␍
|
||||
return false;␍
|
||||
}␍
|
||||
␍
|
||||
public function paramRefs($arr) {␍
|
||||
if (strnatcmp(phpversion(),'5.3') >= 0) {␍
|
||||
$refs = array();␍
|
||||
foreach($arr as $key => $value) $refs[$key] = &$arr[$key];␍
|
||||
return $refs;␍
|
||||
}␍
|
||||
return $arr;␍
|
||||
}␍
|
||||
␍
|
||||
public function redirect($url,$keepQuerystring=false) {␍
|
||||
if ($url) {␍
|
||||
$url = str_replace("[InsertID]",$this->InsertID,$url);␍
|
||||
$url = str_replace("[Insert_ID]",$this->InsertID,$url);␍
|
||||
if ($keepQuerystring) {␍
|
||||
if ($this->JavascriptRedirect) {␍
|
||||
echo('<script>document.location.href="'.$this->addQuerystring($url).'";</script>');␍
|
||||
} else {␍
|
||||
header("location: " . $this->addQuerystring($url));␍
|
||||
}␍
|
||||
}␍
|
||||
if ($this->JavascriptRedirect) {␍
|
||||
echo('<script>document.location.href="'.$url.'";</script>');␍
|
||||
} else {␍
|
||||
header("location: " . $url);␍
|
||||
}␍
|
||||
die();␍
|
||||
}␍
|
||||
}␍
|
||||
␍
|
||||
private function resetCombinations($arrays, $i = 0) {␍
|
||||
if (!isset($arrays[$i])) {␍
|
||||
return array();␍
|
||||
}␍
|
||||
if ($i == count($arrays) - 1) {␍
|
||||
return $arrays[$i];␍
|
||||
}␍
|
||||
if ($this->Action === "relational") {␍
|
||||
for ($x=0; $x<sizeof($arrays[0]); $x++) {␍
|
||||
$row = array();␍
|
||||
for ($y=0; $y<sizeof($arrays); $y++) {␍
|
||||
$row[] = $arrays[$y][$x];␍
|
||||
}␍
|
||||
$result[] = $row;␍
|
||||
}␍
|
||||
} else {␍
|
||||
$tmp = $this->resetCombinations($arrays, $i + 1);␍
|
||||
$result = array();␍
|
||||
foreach ($arrays[$i] as $v) {␍
|
||||
foreach ($tmp as $t) {␍
|
||||
$result[] = is_array($t) ? ␍
|
||||
array_merge(array($v), $t) :␍
|
||||
array($v, $t);␍
|
||||
}␍
|
||||
}␍
|
||||
}␍
|
||||
return $result;␍
|
||||
}␍
|
||||
␍
|
||||
public function resetRepeated() {␍
|
||||
$index = 0;␍
|
||||
$combinations = array();␍
|
||||
for ($x=0; $x<sizeof($this->RepeatedParams); $x++) {␍
|
||||
$combinations[] = $this->RepeatedParams[$x][1];␍
|
||||
}␍
|
||||
$allParams = $this->resetCombinations($combinations);␍
|
||||
for ($x=0; $x<sizeof($this->RepeatedParams); $x++) {␍
|
||||
$newVal = $allParams[$this->RepeatIndex-1];␍
|
||||
if (is_array($newVal)) $newVal = $newVal[$x];␍
|
||||
if ($this->RepeatedParams[$x][2]) {␍
|
||||
$this->bindParam($this->ParamColumns[$this->RepeatedParams[$x][0]],$this->ParamTypes[$this->RepeatedParams[$x][0]],$newVal,$this->ParamDefaults[$this->RepeatedParams[$x][0]]);␍
|
||||
} else {␍
|
||||
$this->ParamValues[$this->RepeatedParams[$x][0]] = $this->bindDefault($this->ParamTypes[$this->RepeatedParams[$x][0]],$newVal,$this->ParamDefaults[$this->RepeatedParams[$x][0]]);␍
|
||||
}␍
|
||||
}␍
|
||||
}␍
|
||||
␍
|
||||
public function saveInSession($varname) {␍
|
||||
$this->SaveAs = $varname; ␍
|
||||
}␍
|
||||
␍
|
||||
public function setFilter() {␍
|
||||
if (sizeof($this->FilterValues) > 0) {␍
|
||||
$this->Statement .= " WHERE ";␍
|
||||
for ($x=0; $x<sizeof($this->FilterValues); $x++) {␍
|
||||
if (!is_array($this->FilterValues[$x][3])) {␍
|
||||
$filterValues = array($this->FilterValues[$x][3]);␍
|
||||
} else {␍
|
||||
$filterValues = $this->FilterValues[$x][3];␍
|
||||
}␍
|
||||
for ($y=0; $y<sizeof($filterValues); $y++) {␍
|
||||
if ($x>0 && $y==0) $this->Statement .= " AND ";␍
|
||||
if (sizeof($filterValues)>1 && $y==0) $this->Statement .= "(";␍
|
||||
if ($y>0) $this->Statement .= ($this->FilterValues[$x][1] == "<>" || strtoupper($this->FilterValues[$x][1]) == "IS NOT")?" AND ":" OR ";␍
|
||||
if ($this->FilterValues[$x][4]) $this->RepeatedParams[] = array(sizeof($this->ParamValues),$this->FilterValues[$x][4],true);␍
|
||||
$columnRef = $this->FilterValues[$x][0];␍
|
||||
if (strpos($columnRef,"`") == false && strpos($columnRef,"(") == false) $columnRef = '`'.$columnRef.'`';␍
|
||||
if (strtoupper($this->FilterValues[$x][1]) == "IS" || strtoupper($this->FilterValues[$x][1]) == "IS NOT") {␍
|
||||
$this->Statement .= $columnRef . " " . $this->FilterValues[$x][1] . " NULL";␍
|
||||
} else {␍
|
||||
$this->Statement .= $columnRef . " " . $this->FilterValues[$x][1] . " ?";␍
|
||||
$this->bindParam($this->FilterValues[$x][2], strval($filterValues[$y]), "");␍
|
||||
}␍
|
||||
}␍
|
||||
if (sizeof($filterValues)>1) $this->Statement .= ")";␍
|
||||
}␍
|
||||
}␍
|
||||
}␍
|
||||
␍
|
||||
public function setQuery($statement) {␍
|
||||
$this->Statement = $statement; ␍
|
||||
}␍
|
||||
␍
|
||||
public function setRepeatCondition($conditionalField) {␍
|
||||
$this->RepeatConditions[] = $conditionalField;␍
|
||||
}␍
|
||||
␍
|
||||
}␍
|
||||
␍
|
||||
}␍
|
||||
?>
|
||||
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user