在php中使用Mysql参数化查询

时间:2015-01-20 14:53:31

标签: php mysql

我有一些用于某些MYSQL interogations的PHP代码,

代码是:

      $DBTYPE = 'mysql';
      $DBHOST = 'localhost';
      $DBUSER = 'tuser';
      $DBPASSWORD = 'password';
      $DBNAME = 'dbname';
      $link = mysql_connect($DBHOST, $DBUSER, $DBPASSWORD);
      mysql_select_db($DBNAME); 
      if (!$link) {
          die('Could not connect: ' . mysql_error());
      }
 //IMG**0**
       $hotelc = $hotelCodes[**0**];    
      $result = mysql_query("SELECT ImageURL FROM Flat_table where HotelCode= '$hotelc'", $link);
  if(!$result) {
      die("Database query failed: " . mysql_error());
  }
  while ($row = mysql_fetch_array($result)) {
      $ImageURL**0** = $row["ImageURL"];
  }
  //IMG**1**
       $hotelc = $hotelCodes[**1**];    
      $result = mysql_query("SELECT ImageURL FROM Flat_table where HotelCode= '$hotelc'", $link);
  if(!$result) {
      die("Database query failed: " . mysql_error());
  }
  while ($row = mysql_fetch_array($result)) {
      $ImageURL**1** = $row["ImageURL"];
  }
..........................
//IMG**x**
       $hotelc = $hotelCodes[**x**];    
      $result = mysql_query("SELECT ImageURL FROM Flat_table where HotelCode= '$hotelc'", $link);
  if(!$result) {
      die("Database query failed: " . mysql_error());
  }
  while ($row = mysql_fetch_array($result)) {
      $ImageURL**x** = $row["ImageURL"];
  }

每个代码行的重复值都以粗体显示。

如何在php.n中创建一个Mysql参数化查询以避免写入所有行。我需要从找到$ hotelc的Flat_table中提取~100 $ ImageURL。

3 个答案:

答案 0 :(得分:0)

例如,您必须重复N次:

for($i=0; $i<$N; $i++)
{
    $hotelc = $hotelCodes[ $i ];    
    $result = mysql_query("SELECT ImageURL FROM Flat_table where HotelCode= '$hotelc'", $link);
    if(!$result) {
        die("Database query failed: ".mysql_error());
    }
    while ($row = mysql_fetch_array($result)) {
        ${'ImageURL'+$i} = $row["ImageURL"];
    }
}

答案 1 :(得分:0)

要循环播放,请使用for

for($n=0; $n<100; $n++){
  $hotelc = $hotelCodes[$n];    
  $result = mysql_query("SELECT ImageURL FROM Flat_table where HotelCode= '$hotelc'", $link);
  if(!$result) {
      die("Database query failed: " . mysql_error());
  }
  while ($row = mysql_fetch_array($result)) {
      $ImageURL[$n] = $row["ImageURL"];
  }
}

但是循环内部的函数是低效的,因为mysql查询将被执行100次。您可以使用mysql中的ImageURL语法查询所有IN()

//Wrap all hotelCodes into one string for query, like ["a","b"] to "'a','b'"
$len = count($hotelCodes);
foreach($hotelCodes as $key=>$code){
 $hotelCodes[$key] = "'".$code."'";
}

$codesStr = implode(",", $hotelCodes);

$result = mysql_query("SELECT ImageURL FROM Flat_table where HotelCode IN (".$codeStr.")", $link);

//Other things...

答案 2 :(得分:0)

编写函数时,您需要寻找共性。此外,您希望最小化数据库交互。为了弃用,我假设$link使用mysqli_connect()

$ImageURL = array();
$list = implode('", "', $hotelCodes);
$result = mysqli_query($link, 'SELECT ImageURL FROM Flat_table where HotelCode IN "' . $list . '"');
while($row = mysql_fetch_assoc($result)) {
     $ImageURL[] = $row["ImageURL"];
}

这只运行一个查询,然后遍历结果,生成一个关联数组。因此echo $ImageURL[0];会输出您的第一个网址。