Nasıl bir çağrı Kaynaklanan sorgu Final Metin mysqli-> hazırlamak görüyor musun?

1 Cevap php

Gibi bu kodu sonra:

$stmt = $mysqli->prepare("SELECT District FROM City WHERE Name=?")) {
$stmt->bind_param("s", $city);
$stmt->execute();
$stmt->bind_result($district);
$stmt->fetch();
printf("%s is in district %s\n", $city, $district);

Nasıl idam edildi Gerçek SQL deyimi görüyor musun?

(Bu "Ad = 'Simi Valley' Şehri SELECT İlçesi'nin;" gibi görünmelidir)

Ben zaten bu basit durumda sadece sorguyu yeniden inşa etmek çok kolay olacağını fark ... ama nasıl çok karmaşık hazırlanmış tablolar için çalışacak genel bir şekilde erişebilirsiniz, ve ben ille zaten anlamıyorum durumlarda sorgusu, vb amaçlanan yapısı var bağlama sonra, SQL sorgusu asıl metni dönecektir deyimi nesne üzerinde denebilecek bazı işlev veya yöntem değil mi?

1 Cevap

Eğer hazırlanmış deyimleri kullanırken, hayır "SQL query" var:

  • First, you have a statement, that contains placeholders
    • Bu ifade DB sunucusuna gönderilir ve orada hazırlanır
    • hangi SQL deyimi analysed, ayrıştırılır, ve onu temsil eden bazı veri yapısı bellek hazırlanmış olduğu anlamına gelir
  • And, then, you have bound variables
    • Sunucuya gönderilen hangi
    • ve hazır deyim yürütülür - bu veriler üzerinde çalışıyor

Ancak, there is actualy no re-construction of an actual real SQL query - PHP tarafında, ne de veritabanı tarafında de.

Yani, hazırlanan ifadenin SQL almak için hiçbir yolu yoktur - there is no such SQL gibi.


If you need to see some informations, for debugging purposes, as your said, you'll generally have two kind of options :

  • Hazırlanan açıklamaya karşılık + bağlayıcı olacağını SQL sorgusu oluşturmak ya by hand.
  • Or ouput the code of the statement, with the placeholders ; and the list of data
    • Bu idam edilebilir, gerçek bir SQL sorgusu olmayacak anlamına
    • Ama genelde hata ayıklama yardımcı olmak için yeterli olacak