PDO'nun ISO 8601 biçimli zaman damgalarıyla ilgili bir sorunu var gibi görünüyor. Çalışmaz ISO8601 TSQL DATETIME parametresi PDO ile nasıl bağlanır?
$pdoDB = new PDO('odbc:Driver=ODBC Driver 13 for SQL Server;
Server='.DATABASE_SERVER.';
Database='.DATABASE_NAME,
DATABASE_USERNAME,
DATABASE_PASSWORD
);
$pdoDB->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$sql = "INSERT INTO dtest (stamp) VALUES ('2011-03-15T10:23:01')";
$stmt = $pdoDB->prepare($sql);
$params = [];
$stmt->execute($params);
:
CREATE TABLE dtest (
"stamp" DATETIME
);
İşleri:
Ben İşte benim basit masam Microsoft® ODBC Driver 13 (Preview) for SQL Server®
kullanarak PHP 7.0.8 çalıştıran Ubuntu 16.04 64 bit den bağlıyorum :
$sql = "INSERT INTO dtest (stamp) VALUES (?)";
$stmt = $pdoDB->prepare($sql);
$params = ['2011-03-15T10:23:01'];
$stmt->execute($params);
Fatal error: Uncaught PDOException: SQLSTATE[22018]: Invalid character value for cast specification: 0 [Microsoft][ODBC Driver 13 for SQL Server]Invalid character value for cast specification (SQLExecute[0] at /build/php7.0-lPMnpS/php7.0-7.0.8/ext/pdo_odbc/odbc_stmt.c:260)
Ben T
yüzden '2011-03-15T10:23:01'
'2011-03-15 10:23:01'
$sql = "INSERT INTO dtest (stamp) VALUES (?)";
$stmt = $pdoDB->prepare($sql);
$params = ['2011-03-15 10:23:01'];
$stmt->execute($params);
Ama 2 milyon kayıtlarına gece çalışan bir komut dosyası yazıyorum hale silerseniz Bu çalışır, bu yüzden gerçekten ziyade taşımaz olur str_replace('T', ' ', $param)
ait çalışan milyonlarca havai ben de bindParam
kullanarak denedim ama aynı hatayı veriyor:
$sql = "INSERT INTO dtest (stamp) VALUES (:tdate)";
$stmt = $pdoDB->prepare($sql);
$date = '2011-03-15T10:23:01';
$stmt->bindParam(':tdate',$date,PDO::PARAM_STR);
$stmt->execute();
Bu parametreyi olduğu gibi bağlamak ve yürütmek için zaten var mı? Ben hata iletisi biraz şüpheli çünkü çünkü PDO işini iyi yaptı, ancak bu parametreleştirme olmadan tür dönüştürme işlemek mümkün mantıklı değil SQL Server'dan geliyor gibi görünüyor.
Ben de denedim SQL dönüşüm:
İşleri:
$sql = "INSERT INTO dtest (stamp) VALUES (CONVERT(DATETIME, '2011-03-15T10:23:02', 126))";
$stmt = $pdoDB->prepare($sql);
$params = [];
$stmt->execute($params);
Çalışmıyor:
$sql = "INSERT INTO dtest (stamp) VALUES (CONVERT(DATETIME, ?, 126))";
$stmt = $pdoDB->prepare($sql);
$params = ['2011-03-15T10:23:02'];
$stmt->execute($params);
Merhaba, bununla herhangi bir şans? – MonkeyZeus
@MonkeyZeus nope, ama ben bütün hafta sonu kapalı oldum, bu yüzden bugün başka bir bıçak almaya gidiyorum. –
İyi şanslar! Nasıl gideceğini bana bildirin – MonkeyZeus