Še eno mysql vprašanje

Lep pozdrav!

Zamima me, če kdo najde kako napako v slednji kodi. Nekaj delam narobe.
HTML:

<body>
    <form method="post" action="procesiraj.php">
    <input name="stevilka" type="text"></input>
    <input type="submit" name="submit"></input>
</body>

In še php:

<?php

$dbc=mysqli_connect("localhost", "xxx@localhost", "", "test") or die("Danger, danger Will Robinson, no entry into database!");

$query="INSERT INTO testek VALUES($_POST["stevilka"])";
mysqli_query($dbc,$query);

if (!mysqli_query($dbc,$query))
  {
  die('Error: ' . mysqli_error($dbc));
  }

mysqli_close($dbc);
?>

13 odgovorov

technolog:
Ne, ravno obratno je. Če je $stevilka integer ali float mora bit brez narekovajev, deluje pa sicer tudi z.

"mora" in "vseeno deluje" :)
Tudi osebno (če pišem query na roke) nikoli ne uporabim enojnih navednic pri številskih tipih.

Če tako vrinjaš podatek direktno v SQL stavek in je podatek številka, castaj zadevo v integer, drugače si odprt za razne SQL injectione:

$query="INSERT INTO testek VALUES(" . (int) $_POST["stevilka"] . ")";

Še bolje pa je, da uporabiš nekaj v stilu http://www.php.net/manual/en/mysqli.real-escape-string.php.

P.S.: V primeru kakšnih FB id-jev zna biti da castanje ne bo ok delovalo, ker je FB id večji od max dovoljenega integerja.

No, ni. Ker danes je večina serverjev 64 bitnih.