【问题标题】:Search for a string in a sql table with php用php在sql表中搜索字符串
【发布时间】:2014-07-24 04:15:07
【问题描述】:

PHP 有点新,但我认为我走在正确的轨道上。我正在尝试在 sql 表上搜索序列号。我想要序列号的响应以及它所在的列。如果有帮助,则有 4 列(id、30、32、31)。

编辑:很抱歉造成混淆......当我输入序列号 002062008002220(所有序列号均为 16 位长)时。我得到一个空白页来显示...当前表格在下面

30 32 31 002062008002220 002062008002222 002062008002233

<form action="search.php" method="get">
    <input id="serials" type="text" name="serials" />
    <input type="submit" />
</form>


<?php

$con=mysqli_connect("localhost", "xxx", "xxx", "nsmserials");

if (mysqli_connect_errno ()) {
echo "Failed to connect to MySQL: " . mysqli_connect_error();
}

$search = mysql_real_escape_string($_REQUEST['serials']);
$query = "SELECT 30, 32, 31 FROM  nsmtable WHERE 30 LIKE '%$search%' OR 32 LIKE       '%$search%' OR 31 LIKE '%$search%'";

$result = mysql_query($query);
while ($row = mysql_fetch_array($result)){
echo "<li><span class='name'><b>{$row['serials']}</b></span></li>";
}

mysqli_close($con);

?>

【问题讨论】:

  • 你的问题是什么?还是有什么问题?
  • 警告您的代码容易受到 sql 注入攻击!
  • 您的SELECT 无效。你想SELECT &lt;cols&gt; FROM nsmtable
  • SELECT nsmtable - SELECT 查询的语法不正确
  • 另外你正在调用 mysql_* 方法但是创建了一个 mysqli 连接。

标签: php html sql string


【解决方案1】:

试试

query('//...')->fetchColumn()

【讨论】:

  • 为什么这解决了OP的问题?仅仅发布一些代码并不是一个很好的答案......
【解决方案2】:

如果不确定传递的表单字段属于哪种类型,请使用$_REQUEST

这将使您免于许多问题。 在您的上述问题中,您使用GET 从表单发送数据(这就是它在您的网址中显示的原因)

在您的 PHP 脚本中,您正在使用 POST 方法。只需验证这一点,代码应该可以正常工作。

【讨论】:

  • 所以从表单中删除“get”方法或删除 $_GET 并使用 $_REQUEST?
  • @doppis 删除 $_GET 并替换为 $_REQUEST
【解决方案3】:

我看到你混淆了 $_GET[]$_POST .. 尝试改变

$query = "SELECT nsmtable WHERE id LIKE '%".$_POST['serials']."%'";

$query = "SELECT nsmtable WHERE id LIKE '%{$search}%'";

您已经准备好搜索字符串。使用它而不是 $_POST。对于功能注意事项,不要混淆$_GET[]$_POST[]。如果您不记得使用的方法,请使用$_REQUEST[]

我希望这会有所帮助。

添加 再次查看查询会发现其他错误。我想你想做的是

"SELECT 30, 32, 31 FROM  nsmtable WHERE 30 LIKE '%$search%' OR 32 LIKE '%$search%' OR 31 LIKE '%$search%'"

如果 ID 不是序列号,您的查询不匹配任何元组。你可以添加一些 echo 语句来查看你的脚本在哪里停止.....

另一个编辑发现另一个错误

<form action="search.php" method="get">
    <input id="serials" type="text" name="serials" />
    <input type="submit" />
</form>


<?php

$con=mysqli_connect("localhost", "xxx", "xxx", "nsmserials");

if (!$con) {
echo "Failed to connect to MySQL: " . mysqli_connect_error();
}

$search = mysql_real_escape_string($_REQUEST['serials']);
$query = "SELECT 30, 32, 31 FROM  nsmtable WHERE 30 LIKE '%$search%' OR 32 LIKE '%$search%' OR 31 LIKE '%$search%'";

$result = mysqli_query($con, $query);
if(!$result){
    die( "Error : "+ mysqli_error($con))s;
}
while ($row = mysqli_fetch_array($result)){
    echo "<li><span class='name'><b>{$row['serials']}</b></span></li>";
}

mysqli_close($con);

?>

你把 mysqli 和 mysql.... 搞混了,选一个坚持下去吧!

【讨论】:

  • 我试过 $query = "SELECT nsmtable WHERE id LIKE '%{$search}%'";我试过 $query = "SELECT FROM nsmtable WHERE id LIKE '%".$_POST['serials']."%'";
  • 更新了我上面的代码...看看。出于某种原因,我仍然得到一个空白页
  • 在while " if(!$result) echo "something"; "之前添加这段代码,你确定002062008002220在表格中吗?
  • 第 30 列有 002062008002220 / 32 有 002062008002222 / 31 有 002062008002233。这些列是 varchar(16)
猜你喜欢
  • 1970-01-01
  • 2012-07-23
  • 1970-01-01
  • 2020-02-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多