为了账号安全,请及时绑定邮箱和手机立即绑定

将 DATE 插入 MYSQL 数据库。将值从 Android 发布到 PHP

将 DATE 插入 MYSQL 数据库。将值从 Android 发布到 PHP

长风秋雁 2023-04-26 14:35:26
我有一个格式为 dd-mm-yyyy 的日期值,我想将 DATE 或 DATETIME 值插入 mysql 数据库,但插入始终为 0000-00-00已经尝试过了,但对我不起作用。$dateOne = $_POST['dateOne'];$dateTwo = $_POST['dateTwo'];$timestamp = date('Y-m-d', strtotime($dateOne));$ts = date('Y-m-d', strtotime($dateTwo));PHP部分$name = $_POST['name'];$myname= $_POST['myName'];$dateOne = $_POST['dateOne'];$dateTwo = $_POST['dateTwo'];$timestampa = date('Y-m-d', strtotime($dateOne));$tsa = date('Y-m-d', strtotime($dateTwo));$sql = "INSERT INTO hires_bp (suraduju_od, suraduju_do,  id_band, id_producer) VALUES ($timestampa, $tsa, (SELECT id FROM band WHERE band_name = '$myname'), (SELECT id FROM producer WHERE producer_name = '$name'))";Android / Java 部分 - 对于 dateTwo.. dateOne 是一样的mCurrentDate = java.util.Calendar.getInstance();int year = mCurrentDate.get(java.util.Calendar.YEAR);int month = mCurrentDate.get(java.util.Calendar.MONTH);int day = mCurrentDate.get(java.util.Calendar.DAY_OF_MONTH);DatePickerDialog mDatePicker = new DatePickerDialog(Calendar.this, new DatePickerDialog.OnDateSetListener() {@Overridepublic void onDateSet(DatePicker view, int year, int month, int dayOfMonth) {mDateTwoEditText.setText(dayOfMonth + "-" + (month+1) + "-" + year);mCurrentDate.set(year, month, dayOfMonth);}}, year, month, day);mDatePicker.show();}从 edittext 和发布参数中获取字符串.. 使用 volley.. 这只是代码的一小部分,因为我认为这里没有问题.. 其他数据插入正确..final String dateOne = mDateOneEditText.getText().toString().trim();final String dateTwo = mDateOneEditText.getText().toString().trim();......protected Map<String, String> getParams() throws AuthFailureError {                Map<String, String> params = new HashMap<>();                params.put("name", name);                params.put("myName", majName);                params.put("dateOne", dateOne);                params.put("dateTwo", dateTwo);                return params;            }我预计插入将是实际选择的日期,但插入是 0000-00-00.. 其他数据插入正确..
查看完整描述

3 回答

?
尚方宝剑之说

TA贡献1788条经验 获得超4个赞

问题出在这里:

$sql = "插入 hires_bp (suraduju_od, suraduju_do, id_band, id_producer) VALUES ($timestampa, $tsa, (SELECT id FROM band WHERE band_name = '$myname'), (SELECT id FROM producer WHERE producer_name = '$name' ))";

'' 丢失 --> $timestampa 和 $tsa..

'$timestampa' 和 '$tsa'


查看完整回答
反对 回复 2023-04-26
?
倚天杖

TA贡献1828条经验 获得超3个赞

MySql 默认的日期格式是YYYY-MM-DD。

将日期格式从 dd-mm-yyyy 更改为yyyy-mm-dd它会起作用


查看完整回答
反对 回复 2023-04-26
?
至尊宝的传说

TA贡献1789条经验 获得超10个赞

智能对象,而不是哑字符串

我们在 Java 和 SQL 中都有数据类型,因此请使用它们。仅仅使用字符串来思考和工作是笨拙的、容易出错的,并且使您容易受到SQL 注入攻击。

相比之下,使用适当的数据类型可以使您的代码更简单、更自文档化、提供类型安全并确保有效值。

避免遗留日期时间类

您正在使用多年前随着 JSR 310 的采用而被java.time类取代的可怕的日期时间类。

java.time

用于LocalDate仅限日期的值。此类适用于处理类似于 SQL 标准类型的数据库列DATE

LocalDate ld = LocalDate.of( 2019 , 1 , 23 ) ;  // January 23, 2019.

使用 JDBC 4.2 及更高版本,传递给数据库。使用准备好的语句来防止 SQL 注入攻击。

myPreparedStatement.setObject( … , ld ) ;

恢复。

LocalDate ld = myResultSet.getObject( … , LocalDate.class ) ;

解析字符串

java.time类在解析/生成表示日期时间值字符串时默认使用标准 ISO 8601 格式。

LocalDate ld = LocalDate.parse( "2019-01-23" ) ;

生成字符串

生成字符串以显示给用户。使用 自动本地化DateTimeFormatter.ofLocalizedDate,或生成标准 ISO 8601 格式的字符串。

String output = ld.toString() ;  // Generate string in standard YYYY-MM-DD format.

要本地化,请指定:

  • FormatStyle确定字符串的长度或缩写。

  • Locale确定:

    • 用于翻译日期名称、月份名称等的人类语言

    • 决定缩写、大写、标点符号、分隔符等问题的文化规范

例子:


Locale l = Locale.CANADA_FRENCH ;   // Or Locale.US, Locale.JAPAN, etc.

DateTimeFormatter f = 

    DateTimeFormatter

    .ofLocalizedDate( FormatStyle.FULL )

    .withLocale( l )

;

String output = ld.format( f );

2019 年 1 月 23 日星期三

//img4.sycdn.imooc.com/6448c669000183c306600384.jpg

查看完整回答
反对 回复 2023-04-26
  • 3 回答
  • 0 关注
  • 122 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信