2012-02-29 10 views
6

PHP bağlama parametr ile MySQLi PDO'daki bu mysql sorguyu yürütmek gerekir.

$publish_date = 'NOW()'; 
$insert = $mysqli->prepare("INSERT INTO posts (post_name,publish_date) VALUES (?,?)"); 
$insert->bind_param("ss", $post_name $publish_date); 
$insert->execute(); 

Böyle publish_date sütuna kayıt ekler: 0000-00-00 00:00:00

Bunu nasıl yapabilirim? Şimdiden teşekkürler.

Not: Tarih sütunu türü datatime'dur.

cevap

25

Sorunun bir parametresi değil, MySQL'e bir değer sağlamanız gerekmez.

$insert = $mysqli->prepare("INSERT INTO posts (post_name, publish_date) VALUES (?, NOW())"); 
+2

: 00: sen '0000-00-00 00 ile biten nedeni 00' takılı size olmasıdır tanınabilir bir datetime değeri yerine '' NOW() 'dizesini eklemeye çalışıyor. MySQL, dizeyi bir datetime değerine zorlar ve seçtiği değer sıfır tarihtir. – Hammerite

+0

Ama ... ve bind_param'daki değişken, bind_param'da "NOW()" değerini vermek için? –

+0

@Pedro, Sorunuzu anlamıyorum. – Hammerite

2

Muhtemelen değil YAPIN tarih fonksiyonunu kullanarak denemelisiniz() Ayrıca

$publish_date =date("Y-m-d H:i:s"); 
$insert = $mysqli->prepare("INSERT INTO posts (post_name,publish_date) VALUES (?,?)"); 
$insert->bind_param("ss", $post_name $publish_date); 
$insert->execute(); 
+1

Bu çözümdeki sorun, veritabanı ve php aynı sunucuda çalışmazsa, saatlerin eşitlenemeyebileceğidir. Bu, NOW() (veritabanı sunucusundan zaman alır) ve tarih (php/web sunucusundan zaman alır) tarihinin aynı olmadığı anlamına gelir. Bu sorundan dolayı birçok problem yaşadım. Bir çözüm, ntp'yi kullanarak tüm zamanları senkronize etmektir. – theomega

+0

@theomega, veritabanı ve php/web sunucusu ntp zaman senkronizasyonu komut dosyası kullanan farklı sunuculardaysa, sorunu çözecektir. – smilezjim

İlgili konular