如何将MySQL数据库中的单行数据存储到PHP变量中?
PHP代码修正与JS变量传递方案
你的代码存在几个关键问题:
- 数据库连接对象不统一:用
mysqli_connect()得到$link,但查询时错误使用$mysqli->query(),导致调用失败。 - printf参数不匹配:占位符数量(2个)和传入参数数量(3个)不一致,输出会异常。
- 未利用传入的
$id:SQL查询未关联$_GET['id'],如果目标是获取指定ID的用户数据,逻辑缺失。 - 缺少向JS传递数据的逻辑:现有代码仅输出文本,无法直接被JavaScript调用。
修正方案1:获取指定ID的用户数据并传给JS
适合你需要根据$_GET['id']获取单个用户信息的场景:
<?php // 处理未传id的情况,避免报错 $id = $_GET['id'] ?? ''; $name = ""; $lat = ''; $lng = ''; // 统一使用$link作为连接对象 $link = mysqli_connect("localhost", "root", "", "projectppy"); if (mysqli_connect_errno()) { printf("Falló la conexión: %s", mysqli_connect_error()); exit(); } // 用预处理语句防SQL注入,绑定id参数 $query = "SELECT name, lat, lng FROM customers WHERE ID = ? LIMIT 1"; $stmt = mysqli_prepare($link, $query); // 假设ID是整数类型,用"i";如果是字符串则用"s" mysqli_stmt_bind_param($stmt, "i", $id); mysqli_stmt_execute($stmt); $result = mysqli_stmt_get_result($stmt); // 提取数据到变量 if ($row = mysqli_fetch_assoc($result)) { $name = $row["name"]; $lat = $row["lat"]; $lng = $row["lng"]; } // 释放资源 mysqli_stmt_close($stmt); mysqli_close($link); ?> <!-- 将PHP变量传递给JavaScript --> <script> // 安全赋值给JS变量,避免XSS和语法错误 const customerName = '<?php echo htmlspecialchars($name, ENT_QUOTES); ?>'; const customerLat = <?php echo is_numeric($lat) ? $lat : 'null'; ?>; const customerLng = <?php echo is_numeric($lng) ? $lng : 'null'; ?>; // 示例函数:使用这些变量 function handleCustomerData() { console.log('客户名称:', customerName); console.log('纬度:', customerLat); console.log('经度:', customerLng); } // 调用测试 handleCustomerData(); </script>
修正方案2:获取所有用户数据并传给JS
如果需要获取所有用户列表供JS使用:
<?php $link = mysqli_connect("localhost", "root", "", "projectppy"); if (mysqli_connect_errno()) { printf("Falló la conexión: %s", mysqli_connect_error()); exit(); } $query = "SELECT name, lat, lng FROM customers ORDER BY ID DESC"; $result = mysqli_query($link, $query); // 收集所有用户数据到数组 $customers = []; while ($row = mysqli_fetch_assoc($result)) { $customers[] = $row; } mysqli_close($link); ?> <script> // 将PHP数组转为JSON格式,直接赋值给JS变量 const customers = <?php echo json_encode($customers); ?>; // 示例:遍历用户数据 function displayCustomers() { customers.forEach(customer => { console.log(`${customer.name} - 坐标: (${customer.lat}, ${customer.lng})`); }); } displayCustomers(); </script>
关键说明
- SQL注入防护:用预处理语句绑定参数,避免直接拼接用户输入到SQL中,提升安全性。
- XSS防护:用
htmlspecialchars()处理字符串变量,防止恶意脚本注入到JS中。 - 数据类型兼容:数值类型(纬度/经度)直接输出,非数值则设为
null,保证JS语法正确。
内容的提问来源于stack exchange,提问作者Brenda
相关产品推荐
相关产品推荐

