我很少编程。我只知道他们说的危险,我只是组装一些代码来得到我想要的。下面的代码似乎在$sql
查询语句中失效。它从不返回任何数据。它应该显示现有的13条记录,但它表示没有可返回的记录。我猜这是某种语法错误?
<?php
$host = 'myipaddress';
$user = 'myuser';
$pass = 'mypass';
$db = 'mydatabase';
$conn = mysql_connect($host, $user, $pass, $db) or die("Can not connect." . mysql_error());
// Create connection
//$conn = mysqli_connect($host, $user, $pass, $db);
// Check connection
if (!$conn) {
die("Connection failed: ");
}
$sql = "SELECT * FROM pages WHERE pid > '5'";
$result = mysql_query($conn, $sql);
if (mysql_num_rows($result) > 0) {
// output data of each row
while($row = mysqli_fetch_assoc($result)) {
echo "id: " . $row["pid"]. " - Name: " . $row["title"]. "<br>";
}
} else {
echo "0 results";
}
mysql_close($conn);
?>
您一直在使用mysql_
API,直到您尝试在此处获取行,而您使用的是mysqli_
。这是行不通的。
while($row = mysqli_fetch_assoc($result)) {
echo "id: " . $row["pid"]. " - Name: " . $row["title"]. "<br>";
}
您的脚本面临SQL注入攻击的风险。请停止使用mysql_*
函数。这些扩展已在PHP7中删除。了解PDO和MySQLi的准备语句,并考虑使用PDO,这真的很容易。
EDIT:您的连接(Good Eyes Ralph!)字符串将不起作用,因为mysql_connect()
不接受数据库作为连接的一部分。您必须使用附加功能mysql_select_db()
来选择数据库。
此外,没有必要在mysql_query()
中指定连接链接,但如果指定,则应该是第二个参数:
$result = mysql_query($sql, $conn);
您的代码有很多错误。
mysql_connect($host, $user, $pass, $db)
mysql_connect()
使用了3个参数,第4个参数并没有做你认为它会做的事情。
- http://php.net/manual/en/function.mysql-connect.php
您需要使用mysql_select_db()
http://php.net/manual/en/function.mysql-select-db.php
然后,
$result = mysql_query($conn, $sql);
该连接在mysql_
中排名第二。
- http://php.net/manual/en/function.mysql-query.php
然后您将混合一个MySQLi函数mysqli_fetch_assoc
,它不会与mysql_
库混合。
- 阅读:我可以在PHP中混合MySQL API吗
所以,只需使用完整的MySQLi库
- http://php.net/manual/en/book.mysqli.php
或PDO:
- http://php.net/manual/en/book.pdo.php
连同一份事先准备好的声明:
- https://en.wikipedia.org/wiki/Prepared_statement
如果查询失败,请检查真正的错误:
- http://php.net/manual/en/function.mysql-error.php
将错误报告添加到文件顶部,这将有助于查找错误。
<?php
error_reporting(E_ALL);
ini_set('display_errors', 1);
// rest of your code
旁注:显示错误只能在暂存中进行,而不能在生产中进行。
正如你所看到的,我没有为你提供一个完整的重写,因为我觉得在"教一个人如何钓鱼…"中,会喂他们一辈子,而不是"扔他们一条鱼…",只喂他们一天(眨眼)。
您需要使用mysql_fetch_assoc()
来代替mysqli_fetch_assoc()
,因为您以前的函数是基于mysql_*
,而不是mysqli_*
if (mysql_num_rows($result) > 0) {
// output data of each row
while($row = mysql_fetch_assoc($result)) {
echo "id: " . $row["pid"]. " - Name: " . $row["title"]. "<br>";
}
} else {
echo "0 results";
}