【问题标题】:PHP Query returns 'Conversion failed when converting the varchar value'PHP 查询返回“转换 varchar 值时转换失败”
【发布时间】:2017-08-25 19:04:54
【问题描述】:

基本上,我通过 Ajax 请求将一些数据发送到 php 脚本,该脚本应该运行查询以更新数据库中的表。

但是它一直在使用文本和注释 ID,我希望没问题: 所以我知道它发送了我想要的数据,但是表只是没有更新(它没有我发送到那里的数据中的“附加文本”字样)

现在在网络选项卡下的 Firefox 开发人员窗口和预览下,我有: 这似乎是抛出一个 sql 错误?

这是从请求中运行的 php 脚本:

<?php include 'connectionDetails.php'; ?>

<?php


if (isset($_POST['noteid1'], $_POST['notetext1'])) 
{

    $noteid2 = $_POST['noteid1'];
    $notetext2 = $_POST['notetext1'];

    $stmt = "UPDATE Notes SET Note = ? WHERE NoteID = ?";
    $params = array($noteid2, $notetext2);

    $stmt = sqlsrv_query($conn, $stmt, $params);

    if ($stmt === false) 
    {
        die( print_r(sqlsrv_errors(), true));
    }
}
else
{
    echo "No Data";

}


?>

这是请求本身:

function submitNoteText()
{
    var noteid = <?php if(isset($_POST['noteid'])){ echo $_POST['noteid'];} ?>;
    var notetext = $("#ta1").val();

    if(noteid == ''||notetext == '')
    {
        alert("NoteID or Text is blank");
    }
    else
    {   
        $.ajax({
            type: "POST",
            url: "submitNoteText.php",
            dataType: 'json',
            data: {noteid1: noteid, notetext1: notetext},
            cache: false,
            success: function(result){
                alert("Success");
            }
        });
    }
    return false;
};

所以我猜它不更新表的原因是那个错误,所以我的问题是如何在 php 中安全地编写查询而不出现该错误?

【问题讨论】:

  • 这是一个 SQL 问题。您发送的值无法通过 SQL 转换为 VARCHAR。要么是因为该值超出了字段大小的界限,要么是包含无效字符
  • 嗯尝试在 SQL 本身中运行更新并且没有错误,它是一个 VARCHAR(MAX) 所以没有字符限制的风险
  • 展示你的专栏设计
  • NoteID(int), NoteName(varchar(40)), Note(varchar(max)) 另外我注意到我的参数在错误的地方,所以我将 noteid 声明为注释,但是我交换了他们并立即获得 504 超时

标签: php jquery sql sql-server


【解决方案1】:

我想你忘记了Note 列中的单引号。试试这个:

$noteid2 = $_POST['noteid1'];
$notetext2 = $_POST['notetext1'];

$stmt = "UPDATE Notes SET Note = '$notetext2' WHERE NoteID = ?";

【讨论】:

  • 但这不会破坏定义参数以使其更安全地注射的目的吗?反正我现在就赶紧试试
猜你喜欢
  • 1970-01-01
  • 2013-02-18
  • 1970-01-01
  • 1970-01-01
  • 2013-12-30
  • 2023-03-31
  • 2011-05-01
  • 1970-01-01
相关资源
最近更新 更多