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'

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 日星期三
添加回答
舉報