webForumDet fria alternativet

Hur gör jag SQL inserts på bästa sätt?

9 svar · 593 visningar · startad av swede

swedeMedlem sedan feb. 2004230 inlägg
#1

Hej!
Håller på att labba lite med PHP / mysql så jag skulle vilja få lite tips
på hur jag programmerar sql på bästa sätt...

Jag har en tabell:

create table species (
  id int NOT NULL,
  name VARCHAR(20),
  primary key (id));

Om jag ska göra en standard insert så skriver jag något i stil med:

$query = "INSERT INTO id VALUES ($_id, $_name)";
mysql_query($query);

Finns det något bättre sätt att göra det på?

Tacksam för tips...

sl0kMedlem sedan maj 2005562 inlägg
#2

du bör sätta auto_increment på id

sen e det bara använda
INSERT INTO species (name) VALUES ($_name);

nitro2k01Medlem sedan aug. 20039 342 inlägg
#3
$_id = addquotes($_id);
$_name = addquotes($_name);

$query = "INSERT INTO species VALUES ($_id, $_name)"; 
mysql_query($query);
swedeMedlem sedan feb. 2004230 inlägg
#4

Jag tog kanske ett dumt exempel, men jag ville ha en tabell där jag gör två
inserts för exemplets skull...

Finns det något sätt att säkra sig så att php variablerna blir av rätt typ?
Dvs att $_id verkligen blir en siffra och att $_name inte innehåller typ SQL injection?

sl0kMedlem sedan maj 2005562 inlägg
#5

nitro2k01 skrev:

$_id = addquotes($_id);
$_name = addquotes($_name);

$query = "INSERT INTO species VALUES ($_id, $_name)"; 
mysql_query($query);

addquotes ? ny funktion ? antar att du menar addslashes() ? :)

Bättre att använda mysql_real_escape_string()

swedeMedlem sedan feb. 2004230 inlägg
#6

Så en bra lösning är i stil med:

$_id = mysql_real_escape_string($_id);
$_name = mysql_real_escape_string($_name);

$query = sprintf("INSERT INTO species VALUES (%d, %s)", $_id, $_name);
mysql_query($query);

Eller har jag missat något?

sl0kMedlem sedan maj 2005562 inlägg
#7

Ja det är en helt ok lösning .. använder du php5 finns smidigare lösningar att tillgå

en sak är att du kan testa $_id så att det endast innehåller siffror med is_numeric()
/red is_numeric är inte bra för att testa heltal .. se mitt ex längre ner istället

swedeMedlem sedan feb. 2004230 inlägg
#8

Sl0k, kan du ge mig ett exempel eller en länk?

sl0kMedlem sedan maj 2005562 inlägg
#9

för att testa att det är heltal ?

if (!myIsInt($_id)) {
  echo '$_id är inte ett heltal';
}
else {
  $_name = mysql_real_escape_string($_name);
  $query = sprintf("INSERT INTO species VALUES (%d, %s)", $_id, $_name);
  mysql_query($query);
} 
function myIsInt ($x) {
   return (is_numeric($x) ? intval($x) == $x : false);
}
aasahMedlem sedan mars 20034 471 inlägg
#10

Testa om det är ett heltal:

function isDigit($str) {
   return preg_match("/^\d+$/", $str);
}

isDigit(7); //true
isDigit('7'); //true
isDigit('7=7'); //false

addslashes behövs bara om magic_quotes_gpc inte är på.

126 ms totalt · 3 externa anrop · v20260731065814-full.30151723
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
124 ms — hämta tråd, inlägg och bilagor (db)