1

私が欲しいもの:著者IDを入れたいのですが、著者名しか取得できません。表の作者より。では、以下のクエリで著者IDを取得するにはどうすればよいですか??

INSERT INTO book (title, isbn, author_id) VALUES('" + BookTitle.Text.ToString() + "', '" + BookIsbn.Text.ToString() + "', '(SELECT id FROM author WHERE first_name = '" + BookAuthor.Text.ToString() + "')')";

エラー:

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'Marijn')')' at line 1

私が何を望んでいるのかを明確にしたいと思います。

ありがとうございました!

4

3 に答える 3

2

2 番目の SELECT ステートメントを単一引用符で囲むべきではありません (MySQL はこれを文字列として解釈します)。

"INSERT INTO book (title, isbn, author_id) 
VALUES ('" + BookTitle.Text.ToString() + "', '" + BookIsbn.Text.ToString() + "', 
    (SELECT id FROM author WHERE first_name = '" + BookAuthor.Text.ToString() + "'))"

PSデータベースにデータを挿入する方法は、インジェクション攻撃に対して非常に脆弱になることに注意してください。

于 2012-09-26T07:51:37.707 に答える
1
Here you have to have function fn_getID(fname) which will return id.

"INSERT INTO book (title, isbn, author_id) 
VALUES('" + BookTitle.Text.ToString() + "', '" + BookIsbn.Text.ToString() + "'"+fn_getID(BookAuthor.Text.ToString()))
于 2012-09-26T07:48:48.203 に答える
0

現在のクエリはSQLインジェクションに対して非常に脆弱です。最良の方法は、を使用してパラメーター化されたクエリを使用することSQLCommand and its parametersです。そして、私はINSERT INTO...SELECTあなたのクエリで使用する方が良いと思います

(
"
INSERT INTO book (title, isbn, authorID)
SELECT '" + BookTitle.Text.ToString() + "' as title,
       '" + BookIsbn.Text.ToString() + "' AS isbn,
       id  as authorID
FROM author 
WHERE first_name = '" + BookAuthor.Text.ToString() + "'
"
)

を使用してADO.Net

string query =  "INSERT INTO book (title, isbn, authorID)
                SELECT @title as title,
                       @isbn AS isbn,
                       id  as authorID
                FROM author 
                WHERE first_name = @author";

using (MySqlConnection conn = new MySqlConnection("connectionstringHere"))
{
    using (MySqlCommand comm = new MySqlCommand())
    {
        comm.Connection = conn;
        comm.CommandType = CommandType.Text;
        comm.CommandText = query;
        comm.Parameters.AddWithValue("@title", BookTitle.Text.ToString());
        comm.Parameters.AddWithValue("@isbn", BookIsbn.Text.ToString());
        comm.Parameters.AddWithValue("@author", BookAuthor.Text.ToString());
        try
        {
            conn.Open();
            comm.ExecuteNonQuery;
        }
        catch (MySqlException ex)
        {
            // error here
        }
        finally
        {
            conn.Close();
        }
    }
}
于 2012-09-26T07:57:38.790 に答える