计划是创建面向公众的互联网服务,可以自动填充数据库中的单词。我使用常规的mysql查询成功地工作但我很担心,因为我将把这个连接包含到wordpress插件中,这将使我的服务器容易受到攻击。
我在MYSQL中创建了一个新用户,只对该表有选择权限,因此我并不担心在脚本中泄露密码,因为我认为无论如何它都有助于调试。我为调试目的放了各种回声等。最终,它的输出将进入Json文件并由Jquery UI自动完成检索。
基本上我遇到的问题是我无法让查询起作用。我尝试逐行添加代码,但连接不起作用。随意测试mysql workbench上的凭据IP地址是46.101.8.220。使调试更加困难的是,当从Web浏览器查看时,代码中的某个人阻止出现在页面输出上的任何内容。任何帮助将不胜感激,因为我花了很多时间尝试Mysqli,PDO,面向对象和程序试图让这个工作。
$term = isset($_GET['term']) ? $_GET['term'] . '%': 'test%';
echo $term;
$conn = new mysqli('localhost', 'search-words','','admin_soup');
print ($conn ? 'connected' : 'cant con');
$query = 'SELECT id as value, word as label FROM word where word LIKE ?;';
$stmt = $conn->prepare($query);
$stmt->bind_param("s", $term)
if ($stmt->execute()){
$result = $stmt->get_result();
while($row = $result->fetch_array(MYSQLI_ASSOC)){
$row_set[] = $row;
}
}
echo json_encode($row_set);//format the array into json data
$stmt->close();
$conn->close();
print_r($row_set);
在第一个建议代码更改为并正常工作之后。谢谢!
$term = isset($_GET['term']) ? $_GET['term'] . '%': 'test%';
echo $term;
$conn = new mysqli('localhost', 'search-words','','admin_soup');
print ($conn ? 'connected' : 'cant con');
$query = 'SELECT id as value, word as label FROM word where word LIKE ?;';
$stmt = $conn->prepare($query);
$stmt->bind_param("s", $term);
if ($stmt->execute()){
$stmt->bind_result($value,$label);
while($row = $stmt->fetch()){
$row_set[] = array('value'=>$value, 'label'=>$label);
}
}
echo json_encode($row_set);//format the array into json data
$stmt->close();
$conn->close();
代码仍然没有返回任何内容。仔细检查用户信息。我在测试sql语句时唯一需要改变的是我需要在' test%'周围添加quoations。但我认为bind_param不需要引号。如果我删除$ query downwars中的所有代码,如果我再次在下面添加,它将在屏幕上显示连接的消息。屏幕没有显示任何内容。
是否可能需要在我的服务器上更新某些内容?
答案 0 :(得分:0)
$stmt->bind_param("s", $term)
缺少“;”
$result = $stmt->get_result();
get_result()
方法并非始终可用。检查php.net:http://php.net/manual/en/mysqli-stmt.get-result.php
仅适用于mysqlnd。
这就是为什么pdo更方便的原因之一......
但我想你可以使用bind_result()
然后使用fetch()
数据http://php.net/manual/en/mysqli-stmt.fetch.php
if ($stmt->execute()){
$stmt->bind_result($value, $label);
while($row = $stmt->fetch()){
$row_set[] = array('value' => $value, 'label' => $label);
}
}
通过使用PDO,代码可能如下所示:
$stmt = $dbh->prepare('SELECT id as value, word as label FROM word where word LIKE ?');
$stmt->execute(array($term));
$result = $stmt->fetchAll(PDO::FETCH_ASSOC);