---
title: "Hur många parametrar tar ett statement?"
type: "forum-thread"
url: "https://www.webforum.nu/amne/php/163115-hur-många-parametrar-tar-ett-statement"
topic: "PHP"
topic_url: "https://www.webforum.nu/amne/php"
author: "SPiN"
published: "2007-08-01T20:29:56.000Z"
updated: "2007-08-03T15:48:08.000Z"
replies: 10
views: 714
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/163115-hur-många-parametrar-tar-ett-statement"
---

# Hur många parametrar tar ett statement?

## #1 — SPiN, 2007-08-01T20:29Z

Hej!

Jag har ett prepared statement som jag vill köra, för att lägga till diverse information i en databas. Problemet ligger i att ingenting läggs till i databasen och jag får inte något felmeddelande. Det är en INSERT-fråga där jag ska fylla 13 fält i databasen, alltså binder jag upp 13 parametrar till mitt PDO-statement. Tar jag färre, 2-4 parametrar, fungerar det självklart ypperligt. Finns det några sätt i PHP (inte SQL) att få PDO att bete sig som det ska? Eller måste jag gå omvägen att uppdatera raden i databasen med mer information?

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

## #2 — itpastorn, 2007-08-01T20:56Z

Felmeddelanden i PDO är normal "tysta".

Använd pdo::setAttribute() för att ändra detta. <http://se.php.net/manual/en/function.PDO-setAttribute.php>

Eller så tittar du på felet med pdo::errorInfo()
<http://se.php.net/manual/en/function.PDO-errorInfo.php>

Kan du visa lite kod?

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

## #3 — SPiN, 2007-08-02T07:41Z

Jag har redan ändrat attributet till att visa felmeddelanden och varningar. PDO:errorInfo() fungerar inte på prepared statements, utan bara direkt på PDO-objektet.

```php
$pdh = new PDO("mysql:host=localhost;dbname=**", "**", "**");
...
$stmt = $pdh->prepare("INSERT INTO tbl (field1, field2...) VALUES(:field1, : field2...)");
$stmt->bindParam(":field1", $value1);
$stmt->bindParam(":field2", $value2);
...
```

Inga konstigheter. Det fungerar när jag bara har lägger in några stycken värden, men 13 stycken verkar vara för mycket att hantera. Det finns ingen fördefinierad övre gräns på hur många parameter ett statement kan ta, som man kan ändra på?

Jag har inget egentligt mellanslag mellan : och field2 i frågan, wF verkar vilja lägga in en smiley där - därför mellanslaget. ;)

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

## #4 — SPiN, 2007-08-02T09:22Z

Pinsamt att erkänna det, men man måste ha koll på längden i ens databasfält... :r
Här skäller jag på utvecklarna av PDO-funktionaliteten, också ligger felet i att jag har deklarerat ett fält i databasen med längden 8 som måste ta en längd på 9 tecken. ;)

För att försvara mig lite, så måste jag säga att det är märkligt att man inte får några felmeddelanden - trots att man ber om dom.

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

## #5 — itpastorn, 2007-08-02T09:55Z

> **SPiN skrev:**
>
> Jag har redan ändrat attributet till att visa felmeddelanden och varningar. PDO:errorInfo() fungerar inte på prepared statements, utan bara direkt på PDO-objektet.

Förlåt: PDOStatement::errorInfo() menade jag: <http://se.php.net/manual/en/function.PDOStatement-errorInfo.php>

Och du behöver inte försvara dig. Ingen anklagelse föreligger. Mina frågor handlar endast om att försöka hitta ditt problem, som är nytt för mig. Här kommer fler frågor...

1\. Är det jag ser äkta kod eller pseudokod? (Jag misstänker att du inte kallar dina tabellfält för field1, field2, osv utom när du övar?)

2\. Har du hittat en kritisk nivå där det slutar fungera, dvs. har du testat med 4, 5, 6, 7... parametrar tills felet uppstår?

3\. Kan du visa hela det relevanta kodblocket samt tabellens struktur? Annars är det svårt att replikera ditt fel.

4\. Vilken version av PHP och MySQL kör du - och på vilket OS? Vi kan ju ha stött på en bugg i PDO. Testa följande:

```php
echo "<p>Database Server Version: ",$pdh->getAttribute(PDO::ATTR_SERVER_VERSION),"</p>\n";
echo "<p>Client Library Server Version: ",$pdh->getAttribute(PDO::ATTR_CLIENT_VERSION),"</p>\n";
echo "<p>Misc Server information: ",$pdh->getAttribute(PDO::ATTR_SERVER_INFO),"</p>\n";
echo "<p>Connection Status: ",$pdh->getAttribute(PDO::ATTR_CONNECTION_STATUS),"</p>\n";
```

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

## #6 — itpastorn, 2007-08-02T09:56Z

Oj, under tiden jag skrev mina frågor skrev du själv ett svar. Kan du upprepa ditt fel igen och köra PDOStatement::errorInfo() bara för att se om det fungerar, för min skull?

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

## #7 — SPiN, 2007-08-02T11:06Z

Jag förstod det sedan, att du menade PDOStatement::errorInfo() - men jag hade redan försökt med det också.

Jag sitter i Windows med Apache 2.2.4, MySQL 5.0.45 och PHP 5.2.3.

Databasens utseende:

```
CREATE DATABASE testdb;
USE testdb;
GRANT ALL PRIVILEGES ON testdb.* TO '***'@'localhost'
	IDENTIFIED BY '***' WITH GRANT OPTION;
CREATE TABLE tbl (
	id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
	testfld VARCHAR(20),
	shortfld VARCHAR(5)
);
```

PHP-sidan:

```php
try {
	$pdh = new PDO("mysql:host=localhost;dbname=testdb", "***", "***");

	/* Har försökt med och utan att sätta attribut */
	$pdh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_WARNING);

	$param1 = "Test";
	$param2 = "This-is-just-a-test";

	$stmt = $pdh->prepare("INSERT INTO tbl (testfld, shortfld) VALUES(?, ?)");
	$stmt->bindParam(1, $param1);
	$stmt->bindParam(2, $param2);

	$stmt->execute();

	print_r($stmt->errorCode());
	print_r($stmt->errorInfo());

	$pdh = null;
} catch(PDOException $e) {
	echo $e->getMessage();
}
```

Jag har under ett tag försökt att få felhanteringen att skrika ut någonting, men inte ens om databasen inte existerar får jag några felmeddelanden.

Jag får inget i retur från getAttribute()-funktionen heller.

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

## #8 — Fredde Mannen, 2007-08-02T11:26Z

hmm .. enligt <http://se.php.net/pdo>
så skall felet visas, det kan inte påverka om du sätter ut die() efter echo $e-\>getMessage();

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

## #9 — colione, 2007-08-02T11:28Z

```php
$pdh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
```

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

## #10 — SPiN, 2007-08-02T12:44Z

Det verkar som att min server hade hängt sig på något sätt bara. Efter en omstart skickar den ut alla felmeddelanden man vill ha.

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

## #11 — Fredde Mannen, 2007-08-03T15:48Z

bra att det löste sig! :)

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

---

Tråden på webben: https://www.webforum.nu/amne/php/163115-hur-många-parametrar-tar-ett-statement
