从seach栏中的用户输入中删除单引号

时间:2017-04-03 00:48:14

标签: php mysql pdo

我有一个简单的PHP / MySQL精神病药物数据库网站。一切都运行良好,直到用户在搜索字符串中的任何位置放置单引号。我收到这个错误:

  

致命错误:未捕获错误:在/home/psychoph/public_html/connection.php:76中调用boolean上的成员函数fetch()堆栈跟踪:#0 /home/psychoph/public_html/index.php(70) :在第76行的/home/psychoph/public_html/connection.php中抛出include()#1 {main}

我试过这个:$generic = $dbc->real_escape_string($generic);无效($generic是分配给用户输入的变量)...我收到此错误:

  

致命错误:未捕获错误:在/home/psychoph/public_html/connection.php:12中调用未定义的方法PDO :: real_escape_string()堆栈跟踪:#0 /home/psychoph/public_html/index.php(70) :在第12行的/home/psychoph/public_html/connection.php中抛出include()#1 {main}

任何指导都将不胜感激。我真的只需要从用户输入中删除单引号,但不知道如何。

这是connection.php的代码:

<?php
$dbc = new PDO(
"mysql:host=173.236.101.74;dbname=psychoph_psychopharm",
'psychoph_knasky',
'#######');

try {
$results = $dbc->query("
    SELECT * 
    FROM drugs 
    WHERE generic = '$generic'
    OR brand = '$generic'
    "); // this method call returns the query results and places it into $results
} catch (Exception $e) {
echo "Unable to retrieve results";
    exit;
}

try {
$side_effects = $dbc->query("
    SELECT se.side_effect 
    FROM side_effects AS se
    JOIN jnct_drug_side_effects AS jse ON se.id = jse.side_effect 
    JOIN drugs AS d ON jse.drug = d.id 
    WHERE generic = '$generic'
    OR brand = '$generic'
    ");
} catch (Exception $e) {
echo "Unable to retrieve results";
    exit;
}

try {
$indications = $dbc->query("
    SELECT i.indication 
    FROM indications AS i
    JOIN jnct_drug_indications AS ji ON i.id = ji.indication 
    JOIN drugs AS d ON ji.drug = d.id 
    WHERE generic = '$generic'
    OR brand = '$generic'
    ");
} catch (Exception $e) {
echo "Unable to retrieve results";
    exit;
}

try {
$oi_indications = $dbc->query("
    SELECT oi.indication 
    FROM ol_indications AS oi
    JOIN jnct_ol_drug_indications AS joi ON oi.id = joi.indication 
    JOIN drugs AS d ON joi.drug = d.id 
    WHERE generic = '$generic'
    OR brand = '$generic'
    ");
} catch (Exception $e) {
echo "Unable to retrieve results";
    exit;
}

$row = $results->fetch(PDO::FETCH_ASSOC); 

$se_row = $side_effects->fetchAll(PDO::FETCH_COLUMN, 0); 
$print_se = implode(", ", $se_row); 

$ind_row = $indications->fetchAll(PDO::FETCH_COLUMN, 0); 
$print_ind = implode(", ", $ind_row); 

$oi_ind_row = $oi_indications->fetchAll(PDO::FETCH_COLUMN, 0); 
$print_ol_ind = implode(", ", $oi_ind_row); 
?>

为了澄清我的问题,我没有任何SQL注入问题。这不是一个包含任何需要保护的数据的网站(除非有人真的想在精神科医生的某个随机网站上改变Zoloft的半衰期)。我只是想让它发挥作用。我是一名医生,正在尝试构建一个有用的Web工具,并且不喜欢我的查询中的单个引号向用户返回错误消息。有一个简单的解决方案吗?我不是程序员 - 我正在努力学习这个网站。谢谢,全部!

1 个答案:

答案 0 :(得分:0)

你可以替换它吗?

http://php.net/manual/en/function.str-replace.php

你可以用''代替。 &lt; ~~基本上是一个空字符串变量

此链接应有帮助。

Regular Expression Sanitize (PHP)