du bör sätta auto_increment på id
sen e det bara använda
INSERT INTO species (name) VALUES ($_name);
9 svar · 593 visningar · startad av swede
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...
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);
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?
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()
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?
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
Sl0k, kan du ge mig ett exempel eller en länk?
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);
}
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å.