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].","; }}} 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) { $percent = ""; $znak = ">"; $znak = "<"; $znak = "!="; $znak = " LIKE "; $percent = "%"; $znak = " BETWEEN "; $btwn = true; } else $znak = "="; $strToQuery.=" AND ".($key=="hidden"?"":$fldArray[$tblName][$key].$znak)."'".$percent.$val.$percent."'"; } } 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()