Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/64.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何分配变量';将s值转换为前面的另一个变量?_Php_Mysql_Variables - Fatal编程技术网

Php 如何分配变量';将s值转换为前面的另一个变量?

Php 如何分配变量';将s值转换为前面的另一个变量?,php,mysql,variables,Php,Mysql,Variables,我的代码在这里: $array_letter = array("A","B","C","Ç","D","E","F","G","H","I","İ","J","K","L", "M","N","O","P","R","S","Ş","T","U","Ü","V","Y","Z"); $sql = "SELECT id,city FROM city WHERE city LIKE '" .$array_letter[$i]."%'"; 在这些代码之

我的代码在这里:

$array_letter = array("A","B","C","Ç","D","E","F","G","H","I","İ","J","K","L",
                      "M","N","O","P","R","S","Ş","T","U","Ü","V","Y","Z");

$sql = "SELECT id,city  FROM city WHERE city LIKE '" .$array_letter[$i]."%'";
在这些代码之后:

for ($i=0;$i<27;$i++) {
$result = mysql_query($sql);
while ($row = mysql_fetch_array($result)) {

 echo "<h3>".$row['city']."</h3>";

   }    
}

对于($i=0;$i您应该使用
mysqli
驱动程序和准备好的语句:

$st = $mysqli->prepare("SELECT id,city FROM city WHERE city LIKE ?'");
for ($i=0;$i<27;$i++) {
  $st->bind_param("s", $array_letter[$i].'%');
  $st->execute();
  $result = $st->get_result();

  while ($row = $result->fetch_assoc()) {
    echo "<h3>".$row['city']."</h3>";
  }  
}

这在其他情况下可能很有用,但同样,如果您正在编写SQL,请使用准备好的语句,因为它们可以更优雅地解决此问题,并提供额外的保护,帮助防止SQL注入攻击和最小化服务器必须进行的SQL解析量。

您应该使用准备好的语句,正如Matthew在他的回答

否则请考虑此(使用PHP 5.3闭包):

然后在循环中:

mysql_query($sql($i));

这将有助于减少数据库调用

$array_letter = array("A","B","C","Ç","D","E","F","G","H","I","İ","J","K","L",
                  "M","N","O","P","R","S","Ş","T","U","Ü","V","Y","Z");
for($i=0;$i<count($array_letter);$i++){
if($i!=count($array_letter)-1)
$qstring.="city like '".$array_letter[$i]."%' or ";
 else
$qstring.="city like '".$array_letter[$i]."%'";
}
$sql = "SELECT id,city  FROM city WHERE ".$qstring;
$result = mysql_query($sql);
while ($row = mysql_fetch_array($result)) {
echo "<h3>".$row['city']."</h3>";
  }   
$array_letter=array(“A”、“B”、“C”、“ch”、“D”、“E”、“F”、“G”、“H”、“I”、“İ”、“J”、“K”、“L”,
“M”、“N”、“O”、“P”、“R”、“S”、“Ş”、“T”、“U”、“Ü”、“V”、“Y”、“Z”);

对于($i=0;$ido您希望我们为您预测$i;-)不,我不知道。当for循环工作时,如何在$sql中分配$i?这就是我想要的。很酷的字母btw,是土耳其语吗?:)几乎所有内容,原始查询都忽略了以数组中不包含的符号开头的所有空值和字符串。但在我看来,一个大型查询仍然是正确的选择。@Dcoder,这是一个有效点,但是如果数据库中有垃圾,应该清理它。另外,添加对
!=NULL将满足一个潜在的合法问题。(我猜有代码没有显示每个字母的标题,这仍然很容易通过一个大查询完成。)谢谢您的回答。这是我搜索的代码。@kalaba2003不客气。我强烈建议您在PDO/mysqli编写的语句中进行调查,使用它真的很好:)
mysql_query($sql($i));
$array_letter = array("A","B","C","Ç","D","E","F","G","H","I","İ","J","K","L",
                  "M","N","O","P","R","S","Ş","T","U","Ü","V","Y","Z");
for($i=0;$i<count($array_letter);$i++){
if($i!=count($array_letter)-1)
$qstring.="city like '".$array_letter[$i]."%' or ";
 else
$qstring.="city like '".$array_letter[$i]."%'";
}
$sql = "SELECT id,city  FROM city WHERE ".$qstring;
$result = mysql_query($sql);
while ($row = mysql_fetch_array($result)) {
echo "<h3>".$row['city']."</h3>";
  }