0
PHP PDO(5.6)で書かれたメソッドで、最後に挿入されたIDが返されます。 問題は、挿入が完了したが、0の "文字列"が返されることです。PDOS lastinsertIdがトランザクションで0を返しています。php - 5.6
stackoverflowには同じ問題で多くの投稿がありますが、解決策が見つかりませんでした。
私には何が欠けていますか?ここで
は、コードは次のとおりです。
public static function set_values(array $arrSql = NULL) {
try {
$fields="";
$bindParamStr = "";
$values = "";
foreach ($arrSql as $tableName => $arrSetValues) {
$table=$tableName; //Inside 1 table
foreach ($arrSetValues as $fieldName => $arrParam) {
$fields .= $fieldName.","; //Inside 1 field
$values .= "?,";
$bindParamStr[]=$arrParam;
}
}
self::$sql= "INSERT INTO $tableName (".rtrim($fields,",").") VALUES (".rtrim($values,",").")";
$stmt = self::$conn->prepare(self::$sql);
$i=1;
foreach ($bindParamStr as $bindPar) {
if(count($bindPar)==1){
$stmt->bindValue($i,$bindPar[0]);
}
else{
$stmt->bindValue($i,$bindPar[0],$bindPar[1]);
}
$i++;
}
self::$conn->beginTransaction();
if($stmt->execute()){
self::$conn->commit();
$id= self::$conn->lastInsertId();
return $id;
}
else{
return FALSE;
}
}
catch (PDOException $e) {
self::$arrCatchConnResult = self::saveLogMsg(["exceptionObjc"=>$e,"sql"=>self::$sql]);
$msg = self::$arrCatchConnResult["displayMsgHTML"];
self::$conn = null;
if (self::$die) {
die($msg);
}
}
}
は、あなたの行が挿入されており、それがauto_incrementing ID列を持っていますか? –
はいそうです。挿入はOKです。 – zwitterion
ちょっとライアン、あなたが送った投稿を見ましたが、私のシナリオは2つの解決策のいずれにも当てはまりません。私は接続が1つしかなく、私は自動増分IDを持っています。これが私がここに投稿した理由です。たぶん私が間違ってやっている何か – zwitterion