29. marts 2015 - 22:25Der er
23 kommentarer og 1 løsning
mysqli opstarts problemer
Hej
Jeg er ved at komme igang med mysqli "men men" Jeg prøver at lave en update til min database og kan ikke få det til at virker. Jeg får denne melding.
Notice: Undefined variable: mysqli in C:\wamp\www\mysqli\index.php on line 10 og Warning: mysqli_real_escape_string() expects parameter 1 to be mysqli, string given in C:\wamp\www\mysqli\index.php on line 10
Her er mine koder:
if (!function_exists("GetSQLValueString")) { function GetSQLValueString($theValue, $theType, $theDefinedValue = "", $theNotDefinedValue = "") { if (PHP_VERSION < 6) { $theValue = get_magic_quotes_gpc() ? stripslashes($theValue) : $theValue; }
Nu står der "Undefined variable: mysqli", så er det jo ret nærliggende at kigge på din variabel $mysqli.
Du sætter den ikke til noget i stedet kode vi kan se, og eftersom du får den fejl, er ret ganske sandsynligt at du slet ikke sætter den. Det allerførste du skal gøre er at oprette din databaseforbindelse med mysqli_connect() eller new mysqli().
Dernæst bruger du funktionen mysqli_real_escape_string() med omvendt parameterrækkefølge. Det første argument skal være mysqli-linket og nummer to strengen, ikke omvendt som du gør.
som tillæg til viperine's kommentar, vedr. din connection: du anvender din connection inde i en function, uden at tage den med over i functionen, så connection er ikke i det scope du arbejder i inde i functionen
i denne linje mangler du at overføre din connection function GetSQLValueString($theValue, $theType, $theDefinedValue = "", $theNotDefinedValue = "")
alternativt, kan man i nødstilfælde anvende global men det kræver variablen udenfor functionen og inde i functionen hedder det sammen, og functionen bliver ikke lige så anvendelig / genbrugbar som man kunne ønske sig.
Men det er $theValue = function_exists("mysqli_real_escape_string") ? mysqli_real_escape_string($mysqli, $theValue ) : mysqli_escape_string($mysqli, $theValue );
Der er problemet.
Her er koden lige igen med det hele.
<?php require_once('Connections/mysqli.php'); ?> <?php if (!function_exists("GetSQLValueString")) { function GetSQLValueString($theValue, $theType, $theDefinedValue = "", $theNotDefinedValue = "") { if (PHP_VERSION < 6) { $theValue = get_magic_quotes_gpc() ? stripslashes($theValue) : $theValue; }
men så kommer den med denne fejl + den anden. Warning: Missing argument 3 for GetSQLValueString(), called in C:\wamp\www\mysqli\index.php on line 43 and defined in C:\wamp\www\mysqli\index.php on line 4
du kan godt få et svar, men jeg vil fraråde dig at anvende global. da du ikke har styr på hvor din variabel bliver ændret, og du er bundet at variabel navnet udenfor functionen, skal hedde det sammen som inde i functionen.
det er ikke særligt flexibelt. hvis du tager den over som parameter bliver functionen mere anvendelig
>$mysqli = mysqli_connect("localhost","root","","mysqli"); ref ("localhost","root","","mysqli") hedder din database mysqli ?? mærkeligt navn til en database.
$mysqli er din connection, hvilke giver mening.
jeg mener viperine kom med en stor del af svaret, så det være en deler.
#13 jeg vil starte med at ændre parameter rækkefølgen, der giver mere mening, og ligge functionen ud i en seperat fil da den skal bruges i flere filer.
jeg vil have min connection som FØRSTE parameter, da den altid SKAL med over i functionen, da jeg anvender en sql funktion (mysqli_real_escape_string) og en connection KAN ikke have default værdi
derefter giver det mening at have typen som anden parameter, da denne også altid skal angives, og så værdien, der kan have en default værdi
mysqli_toolbox.php
<?php function GetSQLValueString($conn, $theType, $theValue="") { // http://php.net/manual/en/function.get-magic-quotes-gpc.php // 5.4.0 Always returns FALSE because the magic quotes feature was removed from PHP. if (PHP_VERSION < "5.4.0") { $theValue = get_magic_quotes_gpc() ? stripslashes($theValue) : $theValue; }
switch ($theType) { case "date": case "text": $theValue = mysqli_real_escape_string($conn, $theValue); $theValue = ($theValue != "") ? "'" . $theValue . "'" : "NULL"; break; case "long": case "int": $theValue = ($theValue != "") ? intval($theValue) : "NULL"; break; case "double": // doubleval er et alias for floatval case "float": $theValue = ($theValue != "") ? floatval($theValue) : "NULL"; break; default: $theValue="NULL"; break; } return $theValue; } ?>
ændringen af parameter rækkefølgen i GetSQLValueString, afspejler sig i kaldet af functionen
index.php (eller hvad du nu kalder din php fil) (utested)
der har du så fjernet mysqli_real_escape_string() og dermed behovet for at bruge en db connection. du har dermed også fjernet en stor del af beskyttelsen, og dermed også noget af berettigelsen af functionen.
Q: hvad sker der hvis programmæren skriver en datatype der ikke existerer ?? (programmører begår også fejl) A: værdien bliver hverken sat i plinger eller på nogle måder sikret løsning: lav en default i din switch
nb: jeg vil foreslå dig at lave din connection som en function, som du meget passende kan placerer i mysqli_toolbox.php
>Det der med parameter hvordan gør jeg det? prøv at se i #17, hvor jeg kalder den $conn function GetSQLValueString($conn,
og kaldet af functionen GetSQLValueString($mysqli,
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.