यह कहता है कि आपके SQL सिंटैक्स में कोई त्रुटि है


<?php
include 'connect.php';
$id = $_GET['updateid'];
if (isset($_POST['submit'])) {
    $name = $_POST['name'];
    $email = $_POST['email'];
    $phone = $_POST['phone'];
    $password = $_POST['password'];

    $sql = "UPDATE `personal info` SET id=$id, name='$name', email='$email', phone='$phone', password='$password' WHERE id=$id";
    $result = mysqli_query($con, $sql);

    if ($result) {
        echo "updated successfully";
        // header('location:display.php');
    } else {
        die(mysqli_error($con));
    }
}
?>

मैंने क्या प्रयास किया है:

मैंने इसे आज़माया लेकिन यह भी कहा “आपके SQL सिंटैक्स में कोई त्रुटि है; लाइन 1 पर ” के पास उपयोग करने के लिए सही सिंटैक्स के लिए अपने मारियाडीबी सर्वर संस्करण से संबंधित मैनुअल की जांच करें” idk क्या करें

<?php
include 'connect.php';
$id = $_GET['updateid'];
if (isset($_POST['submit'])) {
    $name = $_POST['name'];
    $email = $_POST['email'];
    $phone = $_POST['phone'];
    $password = $_POST['password'];

    $sql = "UPDATE `personal info` SET Name='$name', Email='$email', Phone='$phone', assword='$password' WHERE id=$id";
    $result = mysqli_query($con, $sql);

    if ($result) {
        echo "updated successfully";
        // header('location:display.php');
    } else {
        die(mysqli_error($con));
    }
}
?>

समाधान 1

ऐसा मत करो! SQL कमांड बनाने के लिए कभी भी स्ट्रिंग्स को संयोजित न करें। यह आपको आकस्मिक या जानबूझकर SQL इंजेक्शन हमले के लिए खुला छोड़ देता है जो आपके संपूर्ण डेटाबेस को नष्ट कर सकता है। इसके बजाय हमेशा पैरामीटरयुक्त क्वेरीज़ का उपयोग करें।

जब आप स्ट्रिंग्स को जोड़ते हैं, तो आप समस्याएँ पैदा करते हैं क्योंकि SQL को निम्न जैसे आदेश प्राप्त होते हैं:

एसक्यूएल
SELECT * FROM MyTable WHERE StreetAddress = 'Baker's Wood'

जहां तक ​​एसक्यूएल का संबंध है, उपयोगकर्ता द्वारा जोड़ा गया उद्धरण स्ट्रिंग को समाप्त कर देता है और आपको समस्याएं आती हैं। लेकिन यह ज्यादा बुरा हो सकता है। अगर मैं साथ आता हूं और इसके बजाय इसे टाइप करता हूं: “x’; ड्रॉप टेबल मायटेबल; -” तो SQL को एक बहुत अलग कमांड प्राप्त होता है:

एसक्यूएल
SELECT * FROM MyTable WHERE StreetAddress = 'x';DROP TABLE MyTable;--'

कौन सा SQL तीन अलग-अलग कमांड के रूप में देखता है:

एसक्यूएल
SELECT * FROM MyTable WHERE StreetAddress = 'x';

एक पूर्णतया वैध चयन

एसक्यूएल
DROP TABLE MyTable;

एक पूर्णतः मान्य “तालिका हटाएँ” आदेश

एसक्यूएल
--'

और बाकी सब एक टिप्पणी है.
तो यह होता है: किसी भी मेल खाने वाली पंक्ति का चयन करता है, डीबी से तालिका हटा देता है, और किसी भी अन्य चीज़ को अनदेखा कर देता है।

इसलिए हमेशा पैरामीटरयुक्त प्रश्नों का उपयोग करें! या अपने DB को बार-बार बैकअप से पुनर्स्थापित करने के लिए तैयार रहें। आप नियमित रूप से बैकअप लेते हैं, है ना?

PHP प्रश्नों के साथ पैरामीटर शामिल करना आसान बनाता है: PHP: pg_query_params – मैनुअल[^]

コメント

タイトルとURLをコピーしました