猿问

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

我有一个格式为 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() {

@Override

public 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.. 其他数据插入正确..


长风秋雁
浏览 123回答 3
3回答

尚方宝剑之说

问题出在这里:$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'

倚天杖

MySql 默认的日期格式是YYYY-MM-DD。将日期格式从 dd-mm-yyyy 更改为yyyy-mm-dd它会起作用

至尊宝的传说

智能对象,而不是哑字符串我们在 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 日星期三
随时随地看视频慕课网APP

相关分类

Java
我要回答