PHP - Hata zaman MySQL içine insert tarih

4 Cevap php

MySQL içine bir tarih eklemek için çalışırken ben tipik bir sorun var.

MySQL tanımlanan sütun türü TARİH olduğunu. Benim PHP version 5.3.0 olduğunu

Bunun dışında tarih ile ilgili sayısından, benim kod kalanı gayet güzel çalışıyor.

Ve bu yapmak için benim PHP script:

$tablename = BOOKS_TABLE;
    $insert = mysql_query("INSERT INTO $tablename (barcode, book_name, volume_num,".
    " author, publisher, item_type, buy_price, buy_date) VALUES ".
    "(".
        "'" . $barcode      . "', ".
        "'" . $bookname     . "', ".
        "'" . $volumenum    . "', ".
        "'" . $author       . "', ".
        "'" . $publisher    . "', ".
        "'" . $itemtype     . "', ".
        "'" . $buyprice     . "', ".
        "'" . getMySQLDateString($buydate). "'".
        //"'STR_TO_DATE('".$buydate ."', '%d/%m/%Y'))'". //nothing changes in MySQL
    ")");

Ve bu hatalı fonksiyonu şudur:

function getMySQLDateString($buydate) //typical buydate : 04/21/2009
{
    $mysqlDateString = date('Y-m-d H:i:s', $strtotime($buydate)); 

    return $mysqlDateString;
}

Ilk önce yorumladı satır bir şey olmaz, komut hiçbir hata ile yürütülür, ancak, bundan sonra datebase değişti hiçbir şey yoktur.

Geçerli yaklaşım Ölümcül hata söyleyerek işlev adı, bu satırda bir dize olmalıdır neden olacaktır.

Aslında this thread on SO izledi, ama sadece MySQL içine tarihini geçemez ...

Herkes bana doğru değil hangi bölümünün anlamaya yardımcı olabilir?

Bunu nasıl yapacağını, bu durumda, bu doğru olsun?

Böyle bir kalfa gibi soru için özür dilerim, şimdiden teşekkürler ederim.

Güncelleme:

Burada bana bu hatırlatan, ve için teşekkürler html çıktısı olarak tam hata iletisi:

Fatal error: Function name must be a string in C:\xampp\htdocs\comic\app\insertBookIntoDB.php on line 85

hattına hangi nokta ile başlar

$mysqlDateString = date('Y-m-d H:i:s', $strtotime($buydate));

4 Cevap

Aşağıdaki satırda:

$mysqlDateString = date('Y-m-d H:i:s', $strtotime($buydate)); 

Bu olmalıdır:

$mysqlDateString = date('Y-m-d H:i:s', strtotime($buydate)); 

(Örn. fonksiyonu üzerinde dolar kaldırmak)?

Sorunun nedeni, ama burada kapanmasını eksik görünüyor ki eğer emin değil:

 "'" . getMySQLDateString($buydate).

olmalıdır

 "'" . getMySQLDateString($buydate)."'"

Bu bir yorumdur olabilir ama kod biçimlendirme aşkına gerekir.

Despite of the fancy formatting, your code helps you nothing is such a case.
To make it much more useful, you have to add some debugging features in it.
Sensible variable names also helps
As well as removing function call from the string building

$sqldate = getMySQLDateString($buydate);
$sqldate = mysql_real_escape_string($sqldate);
//we name this variable $sql because it contains an SQL query
$sql = "INSERT INTO $tablename (barcode, book_name, volume_num,
        author, publisher, item_type, buy_price, buy_date) VALUES 
        (
        '$barcode',
        '$bookname',
        '$volumenum',
        '$author',
        '$publisher',
        '$itemtype',
        '$buyprice',
        '$sqldate'
        )";
//we name this variable $res because it's a resource 
//type variable contains query result
$res = mysql_query($sql) or trigger_error(mysql_error().htmlspecialchars($sql));

Herhangi meydana geldiyse yürütme üzerine, bu kod, size hata kapsamlı bilgi söyleyecektir.

Benim düşünceme göre, açık tarih biçimlerini kullanarak tarihlerini saklamak can sıkıcı, ve tüm dize dönüştürme beni rahatsız. Ben tarih alanı için bir Bigint kullanarak ve veritabanında bir dönem zaman değerini depolamak tavsiye ederim.

PHP ile çığır zaman alabilirsiniz:

time();

Ya da, daha hassas:

microtime();

Artı, bunları kolayca işleyebilirsiniz. Ertesi gün tarihi değiştirmek için:

$myTime + 86400;

Bu dönem saat biçimi depolamak ve kullanmak çok kolaydır ve tüm dize dönüştürme saçma ile dinlenmişti değildir. Değerden düzgün bir dize almak için:

date("FORMAT STRING", $myTime);