---
title: "Hur gör jag SQL inserts på bästa sätt?"
type: "forum-thread"
url: "https://www.webforum.nu/amne/php/145103-hur-gör-jag-sql-inserts-på-bästa-sätt"
topic: "PHP"
topic_url: "https://www.webforum.nu/amne/php"
author: "swede"
published: "2006-04-05T10:25:09.000Z"
updated: "2006-04-05T14:20:57.000Z"
replies: 9
views: 596
page: 1
pages: 1
language: "sv-SE"
site: "webForum — webforum.nu"
rights: "Upphovsrätten till varje inlägg tillhör dess författare."
attribution: "Citera som: webForum, https://www.webforum.nu/amne/php/145103-hur-gör-jag-sql-inserts-på-bästa-sätt"
---

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

## #1 — swede, 2006-04-05T10:25Z

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: 

```php
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:

```php
$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...

Permalänk: https://www.webforum.nu/p/145103

## #2 — sl0k, 2006-04-05T10:36Z

du bör sätta auto_increment på id 

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

Permalänk: https://www.webforum.nu/p/1793762

## #3 — nitro2k01, 2006-04-05T10:40Z

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

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

Permalänk: https://www.webforum.nu/p/1793765

## #4 — swede, 2006-04-05T10:45Z

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?

Permalänk: https://www.webforum.nu/p/1793766

## #5 — sl0k, 2006-04-05T10:46Z

> **nitro2k01 skrev:**
>
> ```php
> $_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()](http://se.php.net/manual/en/function.mysql-real-escape-string.php)

Permalänk: https://www.webforum.nu/p/1793767

## #6 — swede, 2006-04-05T11:15Z

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

```php
$_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?

Permalänk: https://www.webforum.nu/p/1793781

## #7 — sl0k, 2006-04-05T13:30Z

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()](http://se.php.net/is_numeric) 
**/red is_numeric är inte bra för att testa heltal .. se mitt ex längre ner istället**

Permalänk: https://www.webforum.nu/p/1793810

## #8 — swede, 2006-04-05T14:03Z

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

Permalänk: https://www.webforum.nu/p/1793817

## #9 — sl0k, 2006-04-05T14:13Z

för att testa att det är heltal ?

```php
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);
}
```

Permalänk: https://www.webforum.nu/p/1793820

## #10 — aasah, 2006-04-05T14:20Z

Testa om det är ett heltal:

```php
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å.

Permalänk: https://www.webforum.nu/p/1793824

---

Tråden på webben: https://www.webforum.nu/amne/php/145103-hur-gör-jag-sql-inserts-på-bästa-sätt
