Php 变量未通过引用传递

Php 变量未通过引用传递,php,sql-server,Php,Sql Server,在ms sql server数据库中插入行时,出现以下错误: 警告:变量参数3未通过引用传递(以和开头)。传递给sqlsrv\u prepare或sqlsrv\u query的变量参数应通过引用传递,而不是通过值传递。有关更多信息,请参阅产品文档API参考部分中的sqlsrv_prepare或sqlsrv_query。在第6行的C:\…\immotovoegen.php中 参数1和2的警告相同 这是我的php代码: <?php if (!empty($_POST['omschrijving

在ms sql server数据库中插入行时,出现以下错误:

警告:变量参数3未通过引用传递(以
开头)。传递给
sqlsrv\u prepare
sqlsrv\u query
的变量参数应通过引用传递,而不是通过值传递。有关更多信息,请参阅产品文档API参考部分中的
sqlsrv_prepare
sqlsrv_query
。在第6行的
C:\…\immotovoegen.php中

参数1和2的警告相同

这是我的php代码:

<?php
if (!empty($_POST['omschrijving']) && !empty($_POST['woningtype']) && !empty($_POST['data'])){
    $oms = $_POST['omschrijving'];
    $type = $_POST['woningtype'];
    $data = json_encode($_POST['data']);

    $prep = sqlsrv_prepare($conn, "insert into Woning(omschrijving, data, typeid) values (?, ?,  ?);", array($oms, $data, $type));
    sqlsrv_execute($prep);

    print "Woning is toegevoegd";
}
?>

<form action="<?php print $_SERVER['PHP_SELF']; ?>" method="POST">
    <!--param 1 "omschrijving"-->
    Omschrijving:
    <textarea name="omschrijving" id="omschrijving" cols="30" rows="10></textarea>

    <!--param 2 "data"-->
    <div>
        wc: <input type="checkbox" name="data[]" value="wc"/><br/>
        cv: <input type="checkbox" name="data[]" value="cv"/><br/>
        boiler: <input type="checkbox" name="data[]" value="boiler"/><br/>
    </div>

    <!--param 3 "woningtype"-->
    <select name="woningtype" id="woningtype">
        <?php
        //code for load data from database
        print "<option value='" . $rij["ID"] . "'>" . $rij["naam"] . "</option>";
        ?>
    </select>
</form>

<?php
sqlsrv_close($conn);
?>


您需要将值分配给一个变量,然后将该变量传递给PDO/sqlsrv

<?php
$var = json_encode($_POST['data']);
//checks for all fields are filled in.
$prep = sqlsrv_prepare($conn, "insert into Woning(omschrijving, data, typeid) values (?, ?,  ?);",
    array($_POST['omschrijving'], $var, $_POST['woningtype']));
sqlsrv_execute($prep);
?>
array()
也是一个函数

我建议你试试

$params = array($oms, $data, $type);
$prep = sqlsrv_prepare($conn, "insert into Woning(omschrijving, data, typeid) values (?, ?,  ?);", $params);

你没有将表单标签与POST方法一起使用吗?@Fred ii-是的,我使用。我去更新我的问题“我的代码怎么了?”…除了缺少的
表单
标签。。缺少
表单方法
。。缺少
表单提交
操作..@ChrisMaggs:我已更新我的问题并添加了
表单
标记。我忘了把它放在我的问题中。当你在一个文件中使用这一切时,请使用
isset()
!empty()
在POST数组上,看看这是否有帮助。对不起,这对我没有帮助。我想知道PDO与此代码有什么关系,因为它使用的是,而不是PDO?您知道,由于使用了
sqlsrv.*
函数,这些函数以任何方式、形状或形式都不是PDO的一部分;)是的,我后来添加了sqlsrv,但没有添加第一个。无论使用pdo还是sqlsrv,变量绑定都是相同的。您需要传递引用。不是函数输出。我修改了我的答案@Luïs。你看这对你有帮助吗?
$params = array($oms, $data, $type);
$prep = sqlsrv_prepare($conn, "insert into Woning(omschrijving, data, typeid) values (?, ?,  ?);", $params);