如何在使用 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