2016-07-27 17 views
0

Ich habe einen einfachen Einfüge-Code von PDO in MYSQL-Datenbank.PDO Ausnahme, wenn Wert dynamisch übergeben

Dies ist mein Code.

$catinsert="insert into shop_detail(shop_id,sub_category_id)values(:shop_id,:subcatid)"; 

$catresult=$pdocon->prepare($catinsert); 

foreach($catexplode as $catval) 
{ 
    $subcat=$catval; 
// $subcat=6; 
    $catresult->bindValue(':shop_id',$shopid,PDO::PARAM_INT); 
    $catresult->bindValue(':subcatid',$subcat,PDO::PARAM_INT); 
    $catresult->execute(); 
} 

Wenn ich übergeben Sie den statischen Wert für $ subcat dann (was kommentiert out) es ganz gut funktioniert. Aber wenn derselbe Wert über Array übergeben und begrenzt wird, gibt er die Ausnahme für Fremdschlüsselintegritätsverletzung zurück.

Wegen des Hintergrundes zu dieser Frage. Ich habe einen Fremdschlüssel, der meine Spalte sub_category_id der Tabelle shop_detail mit sub_category Tabelle mit demselben Spaltennamen in Verbindung bringt.

Wichtig. Der Wert, der gebunden wird und eingefügt werden soll, existiert in meiner Unterkategorie Tabelle. Hier


sind die detaillierten Fehler.

exception 'PDOException' with message 'SQLSTATE[23000]: Integrity constraint violation: 1452 Cannot add or update a child row: a foreign key constraint fails (`list`.`shop_detail`, CONSTRAINT `shop_to_subcat` FOREIGN KEY (`sub_category_id`) REFERENCES `sub_category` (`sub_category_id`))' in somewhat file.

+1

Können Sie einen var_dump von $ catexplode posten? – Bert

+0

@Bert Vielen Dank .. Soweit ich weiß, war der Grund, warum Sie nach var_dump gefragt haben, die Überprüfung des Datentyps. Und ich konvertierte gerade meine Variable in Integer und das funktionierte für mich. Danke vielmals. – Archit

Antwort

0

Technisch Sie, dass falsch machen. Sie sollten einmal außerhalb der Schleife binden:

$subcat = null; 
$stmt->bindParam(':subcatid', $subcat); 
foreach($catexplode as $subcat) { 
    $stmt->execute(); 
} 

Der springende Punkt eine Variable auf einen Platzhalter der Bindung ist, dass Sie die Bindung ONCE nur tun. Intern wird PHP einen Verweis auf die gebundene Variable einrichten, so dass alle Änderungen im Wert der Variablen berücksichtigt werden, wenn Sie die Anweisung tatsächlich ausführen.

+0

Danke @Marc B für das Interesse und die Korrektur. Obwohl das Problem vom Datentyp war, habe ich es schließlich gelöst, indem ich den String explizit in Integer umwandelte. – Archit