ich diesen Code bekam:PHP MYSQL Transaktion gibt Fehler SQLSTATE [HY000]: Allgemeiner Fehler
$qry = "BEGIN; SELECT title FROM properties WHERE id=? LIMIT 1; COMMIT";
$arr = array(59);
$stmt = $data_users->default_query($qry, $arr);
print_r($stmt);
und dies ist meine Funktion:
public function default_query($qry, $arr)
{
try {
$stmt = $this->con->prepare($qry);
$stmt->execute($arr);
return $stmt->fetch(PDO::FETCH_ASSOC);
} catch(PDOException $e) {
echo $e->getMessage();
}
}
und es gibt den Fehler, wenn ich zu verarbeiten versuchen das Ergebnis, aber wenn ich die gleiche Abfrage direkt auf SQL tun bekam ich dieses Ergebnis:
Titel
Titeltest
Dies ist das Wunschergebnis, aber ich kann es nicht auf meiner App bekommen. Allerdings, wenn ich den $ qry zu ändern:
//Remove the begin And Commit stuff;
$qry = "SELECT title FROM properties WHERE id=? LIMIT 1";
Es funktioniert, das Problem ist, dass ich brauche Transaktionen zu verwenden, weil ich später ein paar Sachen tun muß, legen letzten id auf einigen anderen Tabellen und, ich reduzierte die Code auf das Minimum, den Fehler zu reproduzieren, aber ich kann es nicht herausgefunden, ich glaube, es hat etwas mit der Funktion der Rückkehr zu tun hat, sondern im Handbuch sagt es
PDO::FETCH_ASSOC: returns an array indexed by column name as returned in your result set
Und das ist, was ich in diesem Moment brauche . Benutze ich das falsche FETCH? Danke in fortgeschrittenem.
UPDATE Ok, habe ich versucht, diese neue Funktion und ich bekomme jetzt ein Boolesches Ergebnis
$qry = "SELECT title FROM properties WHERE id=59 LIMIT 1";
public function commit_query($qry){
try {
$stmt = $this->con->beginTransaction();
$stmt = $this->con->prepare($qry);
$stmt->execute();
$stmt = $this->con->commit();
return $stmt->fetch(PDO::FETCH_ASSOC);
} catch (Exception $e) {
$stmt = $this->con->rollback();
}
}
// I got this error which its OK according to this
Returns TRUE on success or FALSE on failure.
Fatal error: Call to a member function fetch() on boolean in
Gibt es trotzdem ein hier Ergebnis zu erhalten holen?
Noch ein weiteres Update
Ok jetzt habe ich diese Funktion:
public function commit_query_withId($qry,$arr,$multiqry){
try {
$stmt = $this->con->beginTransaction();
$stmt = $this->con->prepare($qry);
$stmt->execute($arr);
$lastId = $this->con->lastInsertId();
$stmt = $this->con->prepare($multiqry);
$stmt->execute();
$stmt = $this->con->commit();
return compact("lastId","stmt");
} catch (Exception $e) {
$stmt = $this->con->rollback();
}
}
Und ich diese Anfragen senden:
//capturedby comes from an array ex:<select name="capturedby[]"
$elements = $_POST['capturedby'];
foreach ($elements as $x){
$sql[] = '(LAST_INSERT_ID(), '.$x.')';
}
$data_users=new database_data();
$qry = "INSERT INTO properties (title, ...)". "VALUES (:tit,...);";
$arr = array(':tit'=>$_POST['title'],...);
$multiqry='INSERT INTO captured_by (property_id, users_admin_id) VALUES '.implode(',', $sql);
$stmt=$data_users->commit_query_withId($qry,$arr,$multiqry);
if ($stmt["stmt"]==true) {
$data['valid'] = true;
$data['response'] = $msg_echo->messages('3');
$data['id'] = $stmt['lastId'];
}else{
$data['valid'] = false;
$data['response'] = $msg_echo->messages('4');
}
Jetzt habe ich zwei erfolgreiche Einsätze und die zuletzt eingefügten ID in einem $ var, also denke ich, das funktioniert für jetzt.
Dies könnte für die Infomation http: // stackoverflow nützlich sein.com/questions/6346674/pdo-support-für-mehrere-Abfragen-pdo-mysql-pdo-mysqlnd – RiggsFolly