【问题标题】:PHP PDO convert string to MS SQL datetime2PHP PDO 将字符串转换为 MS SQL datetime2
【发布时间】:2023-04-11 12:36:02
【问题描述】:


我在将字符串转换为有效的 datetime2 以在 MS SQL DB 中使用时遇到问题。 我正在使用 SQL 中的 CAST 运算符将其转换为有效格式。 代码如下所示:

include("sqlconnection.php");
$statement = $pdo->prepare("UPDATE auftrag SET bestelldatum = CAST(:bestelldatum AS datetime(7)), lieferdatum_wunsch = :lieferdatum, fk_id_kunde = (Select id_kunde from kunde where firmenname = :kunde), fk_id_auftragsstatus = (SELECT id_auftragsstatus from auftragsstatus WHERE bezeichnung = :status) WHERE id_auftrag = :id");
$result = $statement->execute(array("bestelldatum" => $_POST['bestelldatum'], "lieferdatum" => $_POST['lieferdatum'], "kunde" => $_POST['kunde'], "status" => $_POST['status'], "id" => $_POST['id']));
echo $result;

$_POST['bestelldatum'] 的格式如下所示:dd/mm/yyyy
我收到以下错误:

Uncaught PDOException: SQLSTATE[42000]: 
[Microsoft][ODBC Driver 13 for SQL Server][SQL Server]CAST oder CONVERT: Für 
den datetime-Typ wurden ungültige Attribute angegeben. in 
C:\xampp\htdocs\php\scripts\scripts.php:402 Stack trace: #0 
C:\xampp\htdocs\php\scripts\scripts.php(402): PDOStatement->execute(Array) #1 
C:\xampp\htdocs\php\scripts\scripts.php(30): saveAuftragChanges() #2 {main} 
thrown in C:\xampp\htdocs\php\scripts\scripts.php on line 402

已翻译:转换或转换为类型“日期时间”指定的无效属性

希望你能帮助我,
此致,

【问题讨论】:

  • 如果在 PHP 中将 $_POST['bestelldatum'] 转换为有效的日期格式,然后从 SQL 中删除 CAST(),是否会出现错误? $bestelldatum = date('Y-m-d',strtotime($_POST['bestelldatum']));?
  • 我试过了,它给出了错误:将字符串转换为日期或时间时出错。它在这一行:$bestelldatum = date('Y-m-d',strtotime($_POST['bestelldatum']));
    我试过了,strtotime($_POST['bestelldatum']) 给了我什么,它返回一个空字符串
  • 那么$_POST['bestelldatum'] 可能不是正确的数据格式。当您var_dump($_POST['bestelldatum']); 时,您会得到什么?
  • 转储给出以下内容:string(10) "27/06/2018" 并从下面的答案中转储 $bestelldatum 给出以下内容:string(10) "2018-06-28"

标签: php sql-server pdo


【解决方案1】:

strtotime 函数要求带有斜杠的日期为美国格式 (mm/dd/yyyy),但您的日期为欧洲格式,因此首先需要将斜杠更改为破折号。使用以下内容为 SQL 格式化日期。

$bestelldatum = date('Y-m-d',strtotime(str_replace('/','-',$_POST['bestelldatum'])));

如果需要时间也可以试试这个(唯一的改变是为创建的变量添加一个有效时间)。

$bestelldatum = date('Y-m-d 00:00:01',strtotime(str_replace('/','-',$_POST['bestelldatum'])));

【讨论】:

  • 我现在得到了一个合适的格式:2018-06-27,但仍然得到错误:将字符串转换为日期或时间时出错。 SQL-Cast 也不起作用
  • 对于演员表问题,请完全删除演员表,然后将占位符 :bestelldatum 留在那里。
  • 是的,我试过了,它给出了错误:将字符串转换为日期或时间时出错。现在看起来像这样UPDATE auftrag SET bestelldatum = :bestelldatum, lieferdatum_wunsch = :lieferdatum, fk_id_kunde = (Select id_kunde from kunde where firmenname = :kunde), fk_id_auftragsstatus = (SELECT id_auftragsstatus from auftragsstatus WHERE bezeichnung = :status) WHERE id_auftrag = :id
  • 执行如下:execute(array("bestelldatum" => $bestelldatum ...));
  • 完全不知道为什么它抱怨格式。如果它也需要时间,请参阅上面对我的答案的修改。我添加了包含时间的第二个版本。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-04-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多