[英]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類取代了該類 。
使用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.time框架內置於Java 8及更高版本中。 這些類取代了麻煩的舊的舊式日期時間類,例如java.util.Date
, Calendar
和SimpleDateFormat
。
要了解更多信息,請參見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.