【问题标题】:Error when escaping double quote marks转义双引号时出错
【发布时间】:2014-04-17 02:27:12
【问题描述】:

我必须在 mysqli 查询中转义双引号,因为它位于用双引号标记的部分内(长篇大论......)。无论如何,当我这样做时:

$result = mysqli_query($db, \"SELECT `is_doing` FROM `users` WHERE `users`.`user_name` = '{$user}'\");

我收到以下错误:

解析错误:语法错误,意外 '"',需要标识符 (T_STRING)

并且,为了澄清起见,它位于上面显示的代码行中。

请帮帮我。

更新:这是部分:

<script type="text/javascript">
function announce(user_name){
document.getElementById("Divvy").innerHTML="<?php 
$user='"+user_name+"';
if($user != 'Contact list'){
$result = mysqli_query($db, \"SELECT `is_doing` FROM `users` WHERE `users`.`user_name` = '{$user}'\");
while($row = $result->fetch_assoc()){
print_r($row);
}
echo $user.' is doing something that you will soon know about';
}
?>";
}
</script>

由于种种原因,只好把PHP写到JavaScript部分就这么乱了

【问题讨论】:

  • because it is inside a section marked by double quotes 你能多介绍一些这个部分吗?
  • 您不能以\"\' 开始字符串。这用于字符串以避免意外的字符串结尾。
  • @amaster507 我已经用更多代码更新了问题
  • @user3411896 查看我编辑的答案以查看您的实际问题并更好地了解 PHP 与 JavaScript 的交互

标签: php sql mysqli escaping quotes


【解决方案1】:

将您的查询转换为

$result = mysqli_query($db, "SELECT `is_doing` FROM `users` WHERE `users`.`user_name` = '{mysqli_escape_string($user)}'");

【讨论】:

  • 抱歉,我没有看到行尾
  • 所以你需要学习PHP中的字符串基础知识。访问 - php.net/manual/en/language.types.string.php
  • 现在没有错误,但查询仍然没有返回任何可见值。数据库连接牢固
  • 没问题;现在在 MySQL 中运行相同的查询,看看结果如何。可能你的查询不正确
  • 我添加了一个 die 子句但什么也没发生
【解决方案2】:

您对 php 代码中的双引号如何工作存在误解。只有 php 封装 &lt;?php amd ?&gt; 中的代码将由 php 执行,其余代码将简单地显示在输出到浏览器的页面上。

例如:

<script>
  var myvar = "<?php print "foo bar"; ?>";
  alert(myvar);
</script>

会提醒

foo bar

查看您的页面源代码并查看 document.getElementById("Divvy").innerHTML 设置为等于什么。在那里你会看到你的 mysql 错误最有可能或有效的输出。但不要仅仅因为它在你的 php 打开/关闭标签之外的 html/js 中被双引号包围,就转义你的 php 代码中的字符串

编辑:

您的代码无法正常工作的原因是因为您的查询没有返回任何结果,因为这行:

$user='"+user_name+"';

您正在尝试使用 JavaScript 变量设置 PHP 变量。这是不可能的! PHP由服务器执行,JavaScript在代码发送给用户后由浏览器执行。

来自评论:

function jstophp(){


var javavar=document.getElementById("text").value;  

document.getElementById("rslt").innerHTML=""+javavar+"";
}

function phptojs(){

var javavar2 = "I am php variable value";
alert(javavar2);
}

查看实际的源代码。该函数只是提醒使用 PHP 设置的变量,而不是从 JavaScript 向 PHP 发送变量以在 PHP 脚本中使用。

【讨论】:

  • 这就是 AJAX 如此流行的原因,因为它允许 JavaScript 像你想要的那样与 PHP 交互。
  • 这绝对是一个可变的东西(虽然我不知道为什么 echo 可以正常工作),我在 AJAX 中如何做到这一点?
  • @user3411896 在我的编辑中查看对您评论的回复。还对 ajax 进行一些研究,如果遇到困难,然后发布一个新问题。 SO 不是我们向您展示如何完成每一步的地方。
  • @user3411896 你的回声输出"+user_name+" is doing something that you will soon know about 因为这正是你告诉它要做的事情。查询不返回任何结果,您可能关闭了 PHP 通知,因此您不会收到有关未定义变量 $row 的警告,然后 php 脚本继续使用变量回显您的字符串,该变量也是“+user_name+”的字符串跨度>
  • @user3411896 JavaScript 然后显示""+user_name+" is doing something that you will soon know about",它在浏览器级别将变量替换为自己的变量,因此您会看到正确的用户名。再次查看源代码。如果变量从 JavaScript 传递到 PHP,那么您的 innerhtml 集将包含实际的 JavaScript 变量 value 本身,而不是 name。看看这个链接webcheatsheet.com/php/passing_javascript_variables_php.php 但要小心,记住在查询中使用之前转义所有 GET 和 POST 数据
【解决方案3】:

试试看:

   $result = mysqli_query($db, "SELECT `is_doing` 
                                FROM `users` 
                                WHERE `users`.`user_name` = '$user' ");

BWT 你是在混合 php 和 javascript 吗??

【讨论】:

    猜你喜欢
    • 2020-11-26
    • 1970-01-01
    • 2013-06-17
    • 2013-08-09
    • 1970-01-01
    • 1970-01-01
    • 2011-04-19
    相关资源
    最近更新 更多