簡體   English   中英

這個php中的SQL邏輯如何“知道”選擇什么?

[英]How does SQL logic in this php 'know' what to select?

如果標題不好,我深表歉意。

我一直在研究預准備語句,並在這里找到以下代碼:

  /* Create a new mysqli object with database connection parameters */
   $mysqli = new mysqli('localhost', 'username', 'password', 'db');

   if(mysqli_connect_errno()) {
      echo "Connection Failed: " . mysqli_connect_errno();
      exit();
   }

   /* Create a prepared statement */
   if($stmt = $mysqli -> prepare("SELECT priv FROM testUsers WHERE username=?
   AND password=?")) {
  /* Bind parameters
     s - string, b - blob, i - int, etc */
  $stmt -> bind_param("ss", $user, $pass);

  /* Execute it */
  $stmt -> execute();

  /* Bind results */
  $stmt -> bind_result($result);

  /* Fetch the value */
  $stmt -> fetch();

  echo $user . "'s level of priviledges is " . $result;

  /* Close statement */
  $stmt -> close();
  }

  /* Close connection */
  $mysqli -> close();

我不了解的部分是如何在SQL查詢"SELECT priv FROM testUsers WHERE username=? AND password=?") ,系統知道用戶名和密碼是什么。 我知道嗎? 標記是占位符,下面的內容也讓我有些困惑:

$stmt -> bind_param("ss", $user, $pass);

因為我看不到如何在任何時候定義$user$pass ,以及因此SQL查詢如何將$user$pass替換為實際字符串。 如果這樣的話。 這些價值從何而來? 在此示例中它們在哪里?

那是因為他們不是。 這可能只是一個如何使用腳本的示例。 您將必須自己定義$ user和$ pass變量,例如,從某種$ _POST變量中定義。

bind_param函數處理參數。 您必須在查詢中添加與問號相同數量的參數。 比MySQLi核心中的解析器可以將參數安全地添加到查詢中。

它們正在按順序匹配。 字符串構建中的相同邏輯(“ {0}大於{1}”,“ 5”,“ 3”)變為5大於3 所以帶參數

$stmt = mysqli_prepare($link, "INSERT INTO CountryLanguage VALUES (?, ?, ?, ?)");
mysqli_stmt_bind_param($stmt, 'sssd', $code, $language, $official, $percent);

它們都是有序的,並且與列匹配。

如果原始腳本編寫者在例如早期版本的PHP中將register_globals設置為ON,則將用戶和密碼以與$ _POST ['user']和$ _POST ['pass']相同的方式從表單中傳入。 我提供您現在就可以替換它們並繼續前進。

暫無
暫無

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

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