Nasıl bir hazır deyimi içeriğini görüntüleyebilir?

3 Cevap php

Ben sadece bir ilk adım olarak neye benzediğini görmek için ekrana echo bir sorgu ile ilgili bir sorun yaşıyorum eğer, genellikle PHP mysqli'nin ile hazırlanmış ifadeler kullanmak ve öğrenmeye çalışıyorum.

Bir hazır deyimi ile bunu nasıl yapabilirim?

Ben değişkenleri ikame sonra SQL ifadesini görmek istiyorum.

3 Cevap

Hazırlanan ifadeleri kullanarak:

  • Eğer deyimi hazırlamak, bu MySQL sunucusuna gönderilir
  • Eğer değişkenler + deyimini yürütmek bağladığınızda, sadece değişkenler MySQL sunucusuna gönderilir
  • Ve deyim + bağlı değişkenler MySQL sunucuda çalıştırılan - bu "hazırlık" deyimi yürütüldüğünde her zaman-yapıyoruz olmadan (which is why prepared statements can be good for performances when the same statement is executed several times)

PHP tarafında bir SQL sorgusu hayır "Bina" yoktur; bu yüzden, aslında bu sorguyu almak için hiçbir yolu yoktur.


Which means that if you want to see an SQL query, you have to use... Well, SQL queries, and not prepared statements.

For prepared statements that are executed with the mysql_stmt_prepare() and mysql_stmt_execute() C API functions, the server writes Prepare and Execute lines to the general query log so that you can tell when statements are prepared and executed.
[...] the server writes the following lines to the general query log:
Prepare [1] SELECT ?
Execute [1] SELECT 3

Yani hata ayıklama amacıyla aktif general log ve bu dosya üzerinde bir göz tutmak.

edit: oh, the question has a [mysqli] tag... completely overlooked that.
If the statement isn't executed at all have you (double/tripple) checked that no error occurred along the way?

echo "<pre>Debug: start</pre>\n";

$mysqli = new mysqli('localhost', 'localonly', 'localonly', 'test');
if ($mysqli->connect_error) {
  die('Connect Error (' . $mysqli->connect_errno . ') ' . $mysqli->connect_error);
}

$result = $mysqli->query('CREATE TEMPORARY TABLE foo (id int auto_increment, x int, primary key(id))');
if ( false=== $result) { 
 die('error : '. $mysqli->error);
}

$stmt = $mysqli->prepare('INSERT INTO foo (x) VALUES (?)');
if ( false===$stmt ) {
  die ('prepare() failed: ' . $mysqli->error);
}

$result = $stmt->bind_param('i', $x);
if ( false===$result ) {
  die('bind_param() failed');
}

$x = 1;
$result = $stmt->execute();
if ( false===$result ) {
  die('execute() failed: '.$stmt->error);
}

echo "<pre>Debug: end</pre>\n";

Pascal MARTIN (+1) ile mutabık kalarak bu yüzden hata ayıklama için başka bir teknik önermek: var_dump() ya da yanlış veri ya da eğer deyimi içine sokarak konum her değişken, anlamaya gerekir bu şekilde log mantıksal yanlış SQL.