Avatar billede kjaergaard_anders Nybegynder
25. august 2013 - 12:05 Der er 6 kommentarer

Jeg har en MySqli fejl. insert into giver fejlen -1 Row inserted. og ingen data bliver gemt i databasen.

Hej jeg har et problem med at tilføje data til min mysqli database, det her er min kode. Når jeg køre den kommer der ingen data ind i databasen, og jeg får den her besked, -1 Row inserted.

Det er den sidste linie i koden, som udskriver fejlen.
Den ser sådan ud.
printf("%d Row inserted.\n", $stmt->affected_rows);

/--her starter koden--/

$mysqli = new mysqli('localhost', 'root', '1234', 'library');

/* check connection */
if (mysqli_connect_errno()) {
    printf("Connect failed: %s\n", mysqli_connect_error());
    exit();
}

$sql = "INSERT INTO books SET title = ? , pub_year = ?, ISBN = ?, available = ?";
$stmt = $mysqli->prepare($sql);
//$stmt = $mysqli->prepare("INSERT INTO library (title, pub_year, ISBN, available) VALUES (?, ?, ?, ?)");

if (! $stmt) {
    echo "Error: ".$mysqli->error;
    exit;
}


$stmt->bind_param("siii", $title, $pub_year, $ISBN, $available);

$title = 'min nye title';
$pub_year = 2013;
$ISBN = 123456;
$available = 1;

/* execute prepared statement */
$stmt->execute();

printf("%d Row inserted.\n", $stmt->affected_rows);
Avatar billede repox Seniormester
25. august 2013 - 14:03 #1
Problemet må ligge et andet sted. Prøv at se om $stmt ikke har genereret en fejl allerede i prepare eller i bind_param.
Avatar billede erikjacobsen Ekspert
25. august 2013 - 14:32 #2
Som der står i manualen:  "-1 indicates that the query returned an error."

Så prøv et erstatte

  $stmt->execute();

med
 
  $stmt->execute() or die($stmt->error());

og se om den sige noget fornuftigt til dig.

(Manualen:http://php.net/manual/en/mysqli.affected-rows.php )
Avatar billede kjaergaard_anders Nybegynder
25. august 2013 - 14:38 #3
Tak for svarende, problemet lå i mysql databasen, jeg havde glemt at sæt min unik id kolonne til AUTO_INCREMENT, inde i phpmyadmin. Så databasen kunne ikke selv læg nye rækker til.

Kan i ikke smide et svar, så jeg kan luk tråden, på en pæn måde.
Avatar billede erikjacobsen Ekspert
25. august 2013 - 14:42 #4
Ingen point til mig, tak.

Men nu siger du at et ISBN er et tal, integer. Det tro jeg ikke holder i længden. Dels skrives det ofte med bindestreget "978-87-11-39381-9" og selv om man så fjernede bindestregerne kommer du over max int (og så et der en tal-type, der kan klare flere cifre)

Hvad vil kunderne have?
Avatar billede kjaergaard_anders Nybegynder
25. august 2013 - 15:09 #5
Hey erik, nu er der godt nok ingen kunde, det er til mig selv.

men det har du da ret i, den bliver for stor.

Hvad er den bedste fremgangs måde, hvis jeg har en kolon med ISBN koder, som er hurtig at søge i, er det bigint. eller varchar eller noget helt trejde ??
Avatar billede erikjacobsen Ekspert
25. august 2013 - 15:30 #6
Ja, se, det er jo lige det ... Hvis du skal søge på dele af en ISBN så skal det nok være en varchar, men hvis du har hele ISBN-et er det lidt lige meget. Jeg ville bare vælge varchar.

Min grundregel: hvis det ligner et tal, og det giver god mening at lægge to værdier sammen, og anvende resultatet, så er det nok en integer.

Ellers er det en string/varchar.
Avatar billede Ny bruger Nybegynder

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.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester