簡體   English   中英

mysqli_error:更新表(程序風格)

[英]mysqli_error: updating tables (Procedural style)

我正在使用PHP嘗試更新mysqli表中的信息。 我決定嘗試使用mysqli而不是mysql。 不幸的是,我似乎在任何地方都找不到答案,因為我也試圖完成它的過程風格,因為我不了解OOP,並且所有教程(我發現)都在OOP中。

以下是我創建的腳本。 我添加了一些評論,以說明我認為每個命令都在做什么。

<?php    
DEFINE('DB_USER', 'root');
DEFINE('DB_PASS', 'password');
DEFINE('DB_NAME', 'test');
DEFINE('DB_HOST', 'localhost');

//connect to db
$dbc = @mysqli_connect(DB_HOST, DB_USER, DB_PASS, DB_NAME) or die(mysqli_connect_error($dbc));
mysqli_set_charset($dbc, 'utf8');

//form not submitted
if(!isset($_POST['submit'])){

    $q = "SELECT * FROM people WHERE people_id = $_GET[id]";//compares id in database with id in address bar
    $r = mysqli_query($dbc, $q);//query the database
    $person = mysqli_fetch_array($r, MYSQLI_ASSOC);//returns results from the databse in the form of an array

}else{//form submitted

    $q = "SELECT * FROM people WHERE people_id = $_POST[id]";//compares id in database with id in form
    $r2 = mysqli_query($dbc, $q);//query the database
    $person = mysqli_fetch_array($r2, MYSQLI_ASSOC);//returns results from the database in an array

    $fname = $_POST['fname'];
    $lname = $_POST['lname'];
    $age = $_POST['age'];
    $hobby = $_POST['hobby'];
    $id = $_POST['id'];

    //mysqli code to update the database
    $update = "UPDATE people
               SET    people_fname = $fname,
                      people_lname = $lname,
                      people_age = $age,
                      people_hobby = $hobby
               WHERE  people_id = $id";

    //the query that updates the database
    $r = @mysqli_query($dbc, $update) or die(mysqli_error($r));

    //1 row changed then echo the home page link
    if(mysqli_affected_rows($dbc) == 1){    
        echo "<a href=\"index.php\">home page</a>";
    }
}
?>

更新表格

<form action="update.php" method="post">
    <p>First name<input type="text" name="fname" value="<?php echo "$person[people_fname]" ?>" /></p>
    <p>Last name<input type="text" name="lname" value="<?php echo "$person[people_lname]" ?>" /></p>
    <p>Your age<input type="text" name="age" value="<?php echo "$person[people_age]" ?>" /></p>
    <p>Your hobby<input type="text" name="hobby" value="<?php echo "$person[people_hobby]" ?>" /></p>
    <input type="hidden" name="id" value="<?php echo $_GET['id'] ?>" />        
    <input type="submit" name="submit" value="MODIFY" />
</form>`

提交表單時,出現以下錯誤消息

Warning: mysqli_error() expects parameter 1 to be mysqli, boolean given in C:\xampp\htdocs\sandbox\update.php on line 39

我意識到這是在告訴我問題所在

$r = @mysqli_query($dbc, $update) or die(mysqli_error($r));

因此,我嘗試將sqli代碼作為第二個參數放入(我意識到這與將變量放入相同,但這是不得已的方法),但是它看起來不正確,仍然沒有用。 我也看過php.net,但無法從他們給出的示例中得出答案

請指教,我以為這很簡單?

$update = "UPDATE people
           SET    people_fname = $fname,
                  people_lname = $lname,
                  people_age = $age,
                  people_hobby = $hobby
           WHERE  people_id = $id";

您需要引用變量:

$update = "UPDATE people
           SET    people_fname = '$fname',
                  people_lname = '$lname',
                  people_age = '$age',
                  people_hobby = '$hobby'
           WHERE  people_id = '$id'";

然而

您應該查看綁定的參數-您正在接受用戶輸入並將其直接寫入數據庫中,這意味着惡意用戶可以進行各種惡作劇。

看一下mysqli的bind_param的手冊頁-有很多示例代碼片段。

不要將$r傳遞給mysqli_error。 它接受一個可選的mysql鏈接,但無論如何都不接受查詢結果。

在您的情況下,將執行查詢。 計算結果為false,該值分配給$r 賦值的結果為false,導致您以$r為假調用die(mysqli_error($r))

我認為您打算將$dbc傳遞給mysqli_error。

在我看來,問題出在數據庫連接($ dbc)。 因為你在用

@mysqli_connect(DB_HOST, DB_USER, DB_PASS, DB_NAME)

“ @”可能以某種方式隱藏了連接錯誤。

另外,請告訴我您正在現實生活中進行數據清理,對嗎? 如果不是,則必須對所有POST和GET數據運行mysqli_real_escape_string()。

你寫了

//returns results from the database in an array
$person = mysqli_fetch_array($r2, MYSQLI_ASSOC);

但是你應該寫

//returns results from the database in an array
$person = mysqli_fetch_array(MYSQLI_ASSOC);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM