簡體   English   中英

將DATE插入MYSQL數據庫。.將值從Android發布到PHP

[英]Inserting DATE to MYSQL database.. Posting values from Android to 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獲取字符串並發布參數..使用凌空..這只是代碼的一小部分,因為我認為這里沒有問題..其他數據插入正確..

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 ..其他數據正確插入了。

MySql的默認日期格式為YYYY-MM-DD

將日期格式從dd-mm-yyyy更改為yyyy-mm-dd ,它將起作用

問題出在這里:

$ sql =“將INERT插入hires_bp(suraduju_od,suraduju_do,id_band,id_producer)值($ timestampa,$ tsa,(從帶WHERE的帶中的選擇ID帶名稱='$ myname'),(從帶生產者的SELECT ID到WHERE producer_name ='$ name' ))“;

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

'$ timestampa'和'$ tsa'

智能對象,而不是啞字符串

我們在Java和SQL中都有數據類型,因此請使用它們。 僅使用字符串進行思考和處理就很麻煩,容易出錯,並且容易受到SQL-Injection攻擊。

相反,使用適當的數據類型可以使您的代碼更簡單 ,更具自文檔性 ,提供類型安全性並確保有效值

避免使用舊的日期時間類

您正在使用可怕的日期時間類,而該類在幾年前被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 );

mercredi 2019年1月23日

Java(現代和舊式)和標准SQL中的日期時間類型表。


關於java.time

java.time框架內置於Java 8及更高版本中。 這些類取代了麻煩的舊的舊式日期時間類,例如java.util.DateCalendarSimpleDateFormat

要了解更多信息,請參見Oracle教程 並在Stack Overflow中搜索許多示例和說明。 規格為JSR 310

現在處於維護模式Joda-Time項目建議遷移到java.time類。

您可以直接與數據庫交換java.time對象。 使用與JDBC 4.2或更高版本兼容的JDBC驅動程序 不需要字符串,不需要java.sql.*類。

在哪里獲取java.time類?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM