Witam,
od kilku godzin borykam się z pewnym problemem,
mam takie oto dwie funkcje:
pierwsza, odpowiedzialna ogólnie za umieszczanie danych w bazie:
function queryInsert($tblName,$fldArray2,$debug=false) {
$_query1="";
$_query2="";
foreach ($fldArray2 as $key=>$val) {
$_query1.=$fldArray[$tblName][$key].",";
}}}
$query="INSERT INTO ".$tblArray[$tblName]." (".substr($_query1,0,-1).") VALUES (".substr($_query2,0,-1).")"; if ($debug)
else
$odpowiedz="duplicate";
return $odpowiedz;
}
i druga, która odpowiada za tworzenie nowego działu w drzewie menu:
function createNode($parentId=0, $nodeId=false, $tblName="content") {
lockTable($tblName);
$r = getRecord($tblName,$parentId);
$left = $r['left'];
$right = $r['right'];
} else {
$left = 0;
$right = 1;
}
mysql_query("UPDATE ".$tblArray[$tblName]." SET `".$fldArray[$tblName]["right"]."`=`".$fldArray[$tblName]["right"]."`+2 WHERE `".$fldArray[$tblName]["right"]."` > ".($right-1
)); mysql_query("UPDATE ".$tblArray[$tblName]." SET `".$fldArray[$tblName]["left"]."`=`".$fldArray[$tblName]["left"]."`+2 WHERE `".$fldArray[$tblName]["left"]."` > ".($right-1
));
$_POST["left"] = $right;
$_POST["right"] = $right+1;
$_POST["parent"] = $parentId;
$_POST["content"] = $_POST["content"]["PL"];
queryInsert($tblName,$_POST);
unlockTable();
}
teraz sprawa rozbija się o nieszczęsne mysql_insert_id(); z przedostatniej linijki drugiej funkcji.
gdy nie mam tego polecenia, wszystko działa jak należy, natomiast w momencie utworzenia polecenia jak wyżej (return mysql_insert_id(); - chcialbym poznać ID ostatniego umieszczonego w bazie rekordu) serwer atakuje mnie błędami:
Warning: mysql_fetch_array() expects parameter 1 to be resource, boolean given in C:\xampp\htdocs\d4y\__admind4y\inc\config.php on line 153
i
Warning: mysql_fetch_array() expects parameter 1 to be resource, boolean given in C:\xampp\htdocs\d4y\__admind4y\inc\config.php on line 220
co ciekawsze linie 153 i 220 nie dotyczą żadnej z powyższych funkcji!!
linia 153 to inaczej linia 10 z poniższej funkcji
function getRecord($tblName,$val,$fldName="id",$debug=false){
$query="SELECT * FROM ".$tblArray[$tblName]." WHERE ".$fldArray[$tblName][$fldName]."='".$val."'";
foreach ($row as $key=>$val) {
}}
return $returnArr;
}
a linia 220 to inaczej linia 38 z poniższej funkcji:
function getList($tblName,$arr,$start=0,$limit=0,$sortBy=false,$sortOrder=false,$debug=false){
$i=0;
$strToQuery="";
$btwn = false;
foreach ($arr as $key=>$val) {
if (strlen($tblArray[$tblName][$key])) { $percent = "";
$znak = ">";
} elseif (strpos($key,"_<")) { $znak = "<";
} elseif (strpos($key,"_!")) { $znak = "!=";
} elseif (strpos($key,"_LIKE")){ $znak = " LIKE ";
$percent = "%";
} elseif (strpos($key,"_BETWEEN")) { $znak = " BETWEEN ";
$btwn = true;
} else $znak = "=";
$strToQuery.=" AND ".($key=="hidden"?"":$fldArray[$tblName][$key].$znak)."'".$percent.$val.$percent."'";
}
}
$query="SELECT * FROM ".$tblArray[$tblName]." WHERE ".substr($strToQuery,5
).(strlen($sortBy)?
" ORDER BY ".$fldArray[$tblName][$sortBy].(strlen($sortOrder)?
" ".$sortOrder:" ASC"):"").($limit>0?
" LIMIT ".$start.",".$limit:""); if($debug==true) echo $query; foreach ($row as $key=>$val) {
}
$i++;
}}
return $returnArr;
}
nie mam bladego pojęcia co jest nie tak, szukam przyczyny już kilka godzin :/
===================================================
edit:
znalazłem przyczynę, tylko niech mi ktoś teraz wytłumaczy dlaczego...
wystarczyło przesunąć odblokowanie tabeli przed instrukcję mysql_insert_id() w funkcji createNode();
niestety mysql_insert_id() zwraca 0 mimo prawidłowego wykonania funkcji queryInsert()
Ten post edytował siutek 29.12.2012, 23:30:13