【问题标题】:Joining a string and array elements not working加入字符串和数组元素不起作用
【发布时间】:2017-03-24 20:56:14
【问题描述】:

这是我的 PHP 代码:

$conn = new mysqli(DB_HOST, DB_USER, DB_PASSWORD);

/* check connection */
if (mysqli_connect_errno()) {
    printf("Connect failed: %s\n", mysqli_connect_error());
    exit();
}

$statecodes = array(0=>"test1","test2");
while($i<sizeof($statecodes)) {
  $ini = "users_";
  $var = sprintf("%s%s", $ini, $statecodes[$i]);
  print $var;
  $query = "CREATE DATABASE IF NOT EXISTS" . $var;
  $stmt = $mysqli->prepare($query);
  /* Execute the statement */
  $stmt->execute();
  $i=$i+1;
  /* close statement */
  $stmt->close();
}

我得到的输出是

users_

我想创建名为 user_test1user_test2

的数据库

【问题讨论】:

  • 您可以使用foreach 循环遍历数组。另外,一旦你修复了你的变量,你的查询在 PHP 处理之后会是什么样子?这会是一个有效的查询吗?
  • 我不确定,但我认为这个 SQL 查询应该可以工作
  • 它不工作。我试过 $stmt = $conn->prepare("CREATE DATABASE IF NOT EXISTS foo1"); /* 执行语句 */ $stmt->execute();

标签: php mysqli concatenation


【解决方案1】:

试试这个。您在IF NOT EXISTS 之后缺少一个空格,并且由于未初始化计数器而导致循环中断。 PHP 提供了很多方便的方法来处理数组遍历和字符串连接等操作;查看您的代码,我猜您的经验是使用低级语言? printf() 之类的东西在某些任务中派上用场,但是当您只想将两根弦塞在一起时,它就有点过分了!

最后,如果查询不是带有占位符的预准备语句,则无需准备和执行查询。但是,您需要清理输入并检查查询结果是否有错误。

<?php
$conn = new mysqli(DB_HOST, DB_USER, DB_PASSWORD);

/* check connection */
if (mysqli_connect_errno()) {
    printf("Connect failed: %s\n", mysqli_connect_error());
    exit();
}

$statecodes = array("test1","test2");
foreach ($statecodes as $state) {
  $var = "users_$state";
  // remove dangerous characters!
  $var = preg_replace("/[^\w]/", "", $var);
  $query = "CREATE DATABASE IF NOT EXISTS $var";
  $result = $conn->query($query);
  if (!$result) {
      //do something!
  }
}

【讨论】:

  • 它就像一个咒语。除了 $result = $mysqli->query($query);线。请将其更改为 $result = $conn->query($query);谢谢!
  • 感谢您的发现,现在已修复
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-07-08
  • 2020-10-19
  • 1970-01-01
  • 2018-02-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多