swedeMedlem sedan feb. 2004230 inlägg 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 du bör sätta auto_increment på id
sen e det bara använda
INSERT INTO species (name) VALUES ($_name);
$_id = addquotes($_id);
$_name = addquotes($_name);
$query = "INSERT INTO species VALUES ($_id, $_name)";
mysql_query($query);
swedeMedlem sedan feb. 2004230 inlägg 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
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 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 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 Sl0k, kan du ge mig ett exempel eller en länk?
sl0kMedlem sedan maj 2005562 inlägg 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 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å.