首頁>Database>source

我需要在要使用SQL的表中插入特定值(請參见下面的函式):

INSERT INTO *Table Name* (...) VALUES(...);

將要儲存在此表中的值是涉及另一種程式設計語言的值,该語言具有很多奇怪的符號,其中包含單个反斜杠,*,美元符號等。

如何精確插入表中的值?

For instance, when I type '\2' it needs to return \2 inside the table instead of just 2. I am unable to manually enter the two backslashes to get \2. This is because I am receiving input from another user via HTML and sending it to my table with PHP. The issue I am having in that there are these special characters with SQL which are being entered is not the way I intend them to as values.

是否可以使用預先呼叫的某个字元串函式準確键入這些值? 其他方法將不胜感激!

資料庫的附加資訊:

  • Server: Localhost via UNIX socket

    Server type: MySQL

    Server connection: SSL is not being used Documentation

    Server version: 5.6.49-cll-lve - MySQL Community Server (GPL)


可能的答案: $ mysqli是否定義如下? (我稱它為$ db。) $mysqli=mysqli_connect(...);

因此,這些文字的添加如下:

$query = "INSERT INTO Table (C1, ... Cn) VALUES('$C1', ... '$Cn')"; 
$stmt = $mysqli->prepare($query);
$stmt->bind_param("ss", $C1, ..., $Cn);
$stmt->execute();
mysqli_query($db, $query);
最新回復
  • 6月前
    1 #

    只要做 not 使用字元串插值或串聯將值获取到PHP中的SQL查詢中.這容易出錯,可能会使您的程式容易受到SQL註入攻击。

    使用引數化查詢.請參阅"如何在MySQL語句中包含PHP變數"和"如何防止在PHP中进行SQL註入?"。

    使用引數化查詢還將確保以必要的方式自動轉義資料.因此,這也解決了您的問题.不需要手動轉義。

  • 6月前
    2 #

    您正在尋找一種輸入字元串常量的方法。


    說我们要輸入" \X*$Y$!'Z," "
    ; 然後,

      per the SQL standard, '\\X*$Y$!''Z,"'

        we \ 逃脫了 \

        我们 ' 逃脫了 '

        請參阅http://brogoff.com/vertica/HTML/SQLRef/8953.htm

        這在支援SQL標準的任何地方都應该起作用。

        Oracle特有的:取決於列資料型別; 參见https://stackoverflow.com/a/1192431/13950739

        特定於SQL Server的:需要 N 字首; 參见https://stackoverflow.com/a/31270557/13950739和https://stackoverflow.com/a/6380696/13950739

        采用PostgreSQL的" C樣式轉義"語法, E'\\X*$Y$!\'Z,"'

          note the prefix E ,所以開始的分隔符是 E' ; 結束定界符只是 ' .

          我们 \ 逃脫了 \

          我们也 \ 逃脫了 '

          請參见https://www.postgresql.org/docs/current/sql-syntax-lexical.html,在帶有C樣式轉義符的字元串常量下

          采用PostgreSQL的" Unicode轉義"語法, U&'\005CX*$Y$!\0027Z,"'

            note the prefix U& ,所以開始的分隔符是 U&' ; 結束定界符只是 ' .

            5C是 \的ASCII碼(因此也是UTF8碼) ,以十六进製表示

            27是 '的ASCII碼(因此也是UTF8碼) ,以十六进製表示

            請參见https://www.postgresql.org/docs/current/sql-syntax-lexical.html,在帶有Unicode轉義符的字元串常量下

            采用PostgreSQL的"美元對等"語法, $flarp$\X*$Y$!'Z,"$flarp$

              beginning delimiter is $ plus任意字元的可選序列(我用 flarp 您可以使用任何您類似的东西)plus $ ; 結束定界符是一迴事。

              這是让您輸入原始字元串未更改的唯一方法---只要它不包含 $whateverSpecialDelimiterTagYouChose$ ,就是!

              參见https://www.postgresql.org/docs/current/sql-syntax-lexical.html,在用美元報價的字元串常量

  • 6月前
    3 #

    我相信您只需在每个特殊字元後面插入一个反斜杠即可將其轉義.反斜杠在MySQL中保留為特殊的轉義字元(甚至轉義其他反斜杠),因此將繼續字元视為文字.您可以在MySQL文件中了解更多資訊。

    如果您使用的是PHP,則取決於哪个版本,還可以在應用程式端利用這些功能之一来轉義特殊字元。

  • mysql:區域,经理和总经理的關係設計
  • ssms:sql server將本地資料匯入到遠端服務器