如何在使用 mysqli prepare 时获取 assoc 数组

Posted

技术标签:

【中文标题】如何在使用 mysqli prepare 时获取 assoc 数组【英文标题】:How to fetch assoc array while using mysqli prepare 【发布时间】:2013-09-12 08:58:44 【问题描述】:

为了确保我的数据库安全,我使用了准备语句。这是我的代码:

//connecting to mysql database
$con=mysqli_connect("host","user","pass","dbname");
// checking database connection
if (mysqli_connect_errno($con))
    echo "Failed to connect to MySQL: " . mysqli_connect_error();


$stmt = mysqli_prepare($con,"SELECT * FROM `table` WHERE emb=? LIMIT 1");
mysqli_stmt_bind_param($stmt, 's', $emb);
mysqli_stmt_execute($stmt);
mysqli_stmt_close($stmt);

现在我想知道如何使用 ASSOC 获取数组

$embInfo = mysqli_fetch_array($stmt, MYSQLI_ASSOC);

我想要这个,这样我就可以在下面放一些东西来获取值

$embInfo['name']

$embInfo['email']

【问题讨论】:

我想这会有所帮助 ***.com/questions/15846583/… 并且更好地转向 PDO 如果 mysqlnd 不可用,则需要定义所有字段并使用 bind_result 或 use something like this to dynamically define the fields. 如果我使用mysqli-stmt.get-result 会怎样?这会有帮助吗?有人在 *** 聊天中提出了这个建议。 【参考方案1】:

试试这个:

//connecting to MySql database
$con=mysqli_connect("host","user","pass","dbname");
// checking database connection
if (mysqli_connect_errno($con))
    echo "Failed to connect to MySQL: " . mysqli_connect_error();


$stmt = mysqli_prepare($con,"SELECT * FROM `table` WHERE emb=? LIMIT 1");
mysqli_stmt_bind_param($stmt, 's', $emb);
mysqli_stmt_execute($stmt);


while($embInfo = mysqli_fetch_array($stmt, MYSQLI_ASSOC))
  echo 'My name is '.$embInfo['name'].'and my email is '.$embInfo['email'].'<br/>';



mysqli_stmt_close($stmt);

【讨论】:

“试试这个”——有什么用?【参考方案2】:

我可以建议一个替代方案


  $server = '';
  $user = '';
  $pass = '';
  $db = '';

  // connect to the database
  $mysqli = new mysqli($server, $user, $pass, $db);

  // show errors (remove this line if on a live site)
  mysqli_report(MYSQLI_REPORT_ERROR);

  $club=$_POST'club'];
  $sql = "SELECT * FROM players WHERE club = '$club'";
  $result=mysqli_query($mysqli,$sql);
  while($row = mysqli_fetch_array($result))
  
    echo $row['player'];
  
  

【讨论】:

但我认为这并不安全。 SQL 注入可以通过此代码破坏数据库。这就是我尝试使用准备好的语句的原因。 $club = mysql_real_escape_string($_POST['club']);试试这个 @sushruth-sv 真正的转义字符串已过时,您建议使用已弃用的 mysql。我不明白你想说什么。你应该知道这些天是最安全的方法。 更加安全和快速,因为 MySQL 引擎能够为连续查询重用它的旧执行计划

以上是关于如何在使用 mysqli prepare 时获取 assoc 数组的主要内容,如果未能解决你的问题,请参考以下文章

调用“mysqli_stmt_prepare”时是不是应该手动检查错误? [复制]

使用mysqli Prepare发送STMT_PREPARE数据包时出错

如何从 Prepared 语句中获取行数据,然后将其与 AJAX() 函数一起使用

MYSQLI Prepared statement update statement with where in array

MySQLi以数组形式获取[重复]

具有多个连接的 mysqli Prepared 语句不断返回 false [关闭]