webForumDet fria alternativet

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

PHP

9 svar · 593 visningar · startad av swede

Medlem sedan feb. 2004230 inlägg
Frågan#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...

Medlem 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);

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

$query = "INSERT INTO species VALUES ($_id, $_name)"; 
mysql_query($query);
Medlem 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?

Medlem 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()

Medlem 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?

Medlem 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

Medlem sedan feb. 2004230 inlägg
#8

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

Medlem 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);
}
Medlem 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å.

262 ms totalt · 4 externa anrop · v20260731065814-full.6fe65c25
128 ms — deklarationer (db)
0 ms — hämta statistik (cache)
131 ms — hämta tråd, inlägg och bilagor (db)
128 ms — ändringar (db)