Я не могу получить node.js mysql ВСТАВИТЬ В инструкцию для работы

#javascript #mysql #express

Вопрос:

Я разрабатываю небольшое приложение apt bldg mgmt, используя node.js, Express и MySQL. Он завершен на 90%.

В функции для добавления нового резидента я использую имя ввода новой формы резидента, pwd, блок#, apt#, ежемесячную плату за обслуживание apt, переданную функции в качестве переменных параметров, для установки столбцов «isim», «sifre», «блокно», «дайрено», «айлик_айдат» соответственно в таблице mysql «havuzs_sakinleri». Для остальных значений столбцов я использую текущий год из MySQL и числовые константы. Когда я запускаю приложение, я получаю следующее сообщение об ошибке и выводю его на консоль.

код: ‘ER_PARSE_ERROR’,
errno значение: 1064,
sqlMessage: «у вас ошибка в вашем SQL синтаксиса; проверьте руководство, которое соответствует вашему серверу MySQL версии для правильного синтаксиса для использования рядом с ‘Meydaner, 2222, 1, 6, 2021, 225, 1, 0, 2, 0, 3, 0, 4, 0, 5, 0, 6, 0, 7, 0, 8, 0,’ в строке 1»,
код sqlstate: ‘42000’,
индексирование: 0,
оператора SQL: вставить в havuzs_sakinleri (исим, sifre, blokno, daireno, йил, aylik_aidat, ay1_no, ay1_odemesi, ay2_no, ay2_odemesi, ay3_no, ay3_odemesi, ay4_no, ay4_odemesi, ay5_no, ay5_odemesi, ay6_no, ay6_odemesi, ay7_no, ay7_odemesi, ay8_no, ay8_odemesi, ay9_no, ay9_odemesi, ay10_no, ay10_odemesi, ay11_no, ay11_odemesi, ay12_no, ay12_odemesi, toplam_odenen_tl, devredilen_tl, aidat_bakiye) значения(Behran Meydaner, 2222, 1, 6, 2021, 225, 1, 0, 2, 0, 3, 0, 4, 0, 5, 0, 6, 0, 7, 0, 8, 0, 9, 0, 10, 0, 11, 0, 12, 0, 0, 0, 0)’

}

Как видно из выходных данных, MySQL правильно заменяет все значения столбцов значениями из предложения VALUES. Но по какой-то причине ему что-то не нравится в первом значении ‘ usrname ‘ в предложении VALUES. Я проверял синтаксис снова и снова, но не могу найти ничего неправильного. Интересно то, что если я использую строковый литерал, заключенный в двойные кавычки, как «Behran Meydaner», это работает, но если я использую » usrname » в качестве значения, это не работает. Он принимает все остальные значения» ….. «, но почему-то ему не нравится первое значение » имя пользователя «. имя пользователя-это допустимый ввод из формы ввода. Если кто-нибудь может сказать мне, что в этом плохого, я буду признателен. Спасибо.

Рассматриваемая функция JavaScript приведена ниже.

 function addUser(usrname, usrpwd, usrblokno, usrdaireno, usraidat, callback) {
    var today    = new Date();
    var curryear = today.getFullYear();
    var sql      = 'INSERT INTO havuzs_sakinleri (isim, sifre, blokno, daireno, yil, aylik_aidat, '  
                'ay1_no, ay1_odemesi, ay2_no, ay2_odemesi, ay3_no, ay3_odemesi, ay4_no, ay4_odemesi, '  
                'ay5_no, ay5_odemesi, ay6_no, ay6_odemesi, ay7_no, ay7_odemesi, ay8_no, ay8_odemesi, '  
                'ay9_no, ay9_odemesi, ay10_no, ay10_odemesi, ay11_no, ay11_odemesi, ay12_no, ay12_odemesi, '  
                'toplam_odenen_tl, devredilen_tl, aidat_bakiye) '  
                'VALUES(' usrname ', ' usrpwd ', ' usrblokno ', ' usrdaireno ', ' curryear ', ' usraidat ', '  
                '1, 0, 2, 0, 3, 0, 4, 0, 5, 0, 6, 0, 7, 0, 8, 0, 9, 0, 10, 0, 11, 0, 12, 0, 0, 0, 0)';
    con.query( sql, function( err, res ){
        if ( err ) { // If error in adding new user to the database, display error message.
            throw err;
            status_message=('Site sakini eklenirken sorun oluştu.');
        }
        else  // If add is successful, display a message.
            status_message = ("Bu kisi yeni site sakini olarak veri tabanina eklendi. Ana sayfaya dönmek için lütfen Ana sayfa butonuna tıklayınız!");

        return callback( status_message );
    } );
}
 

Комментарии:

1.Значения строкового типа должны быть заключены в кавычки 'Behran Meydaner' ('' usrname '',

2. Ваш код открыт для внедрения SQL. Вы должны использовать подготовленные заявления . Вы никогда не должны писать такой код, даже если это только в учебных целях.

3. Да , я прочитал много комментариев о внедрении sql и альтернативах, но все альтернативы были запутанными и не простыми для понимания. Я использую js, Express и MySQL, и я не хочу вводить другое промежуточное программное обеспечение без необходимости. Итак, есть ли простой способ использовать подготовленные заявления, и если да, то как?

4. Да, я разместил ссылку в своем комментарии. Вам следует прочитать о Бобби Тейлзе

5. Спасибо, джабаа. Следуя вашему совету, я изменил свою инструкцию sql следующим образом, чтобы избежать значений запроса.