我正在使用PHP使用sqlsrv
驱动程序连接SQL数据库。但是,我遇到了一个问题:
$string = "Home";
$DBH->prepare( "INSERT INTO table_name (column_name) VALUES ('" .$string. "')" );
$DBH->execute();
这是怎么回事?
$string = "Home's";
$DBH->prepare( "INSERT INTO table_name (column_name) VALUES ('" .$string. "')" );
$DBH->execute();
但这不是吗?
SQL数据库似乎不接受$string
变量中的撇号。在过去,我会使用mysql_real_escape_string
,但这不是一种选择。
答案 0 :(得分:2)
这是因为您正在使用预准备语句...但没有准备任何输入,而只是将值打到SQL中。看它应该说清楚:
前1:
$DBH->prepare( "INSERT INTO table_name (column_name) VALUES ('Home')" );
前2:
$DBH->prepare( "INSERT INTO table_name (column_name) VALUES ('Home's')" );
看看你的报价现在搞砸了?
执行此操作的正确方法是实际使用预准备语句的功能:
$string = "Home's";
$DBH->prepare( "INSERT INTO table_name (column_name) VALUES (:column_name)" );
$DBH->bindParam(':column_name', $string);
$DBH->execute();
请注意您的语句是如何准备好:column_name
参数准备接受值的。然后bindParam
将值放入并执行。
现在甚至可以使用新值重用prepare:
$string = "Home's Holmes is homing";
$DBH->execute();
答案 1 :(得分:0)
sqlsrv
documentation page在如何使用准备好的陈述方面有很好的例子:
$sql = "INSERT INTO table_name (column_name) VALUES (?)";
$params = array("Home's");
$stmt = sqlsrv_query( $conn, $sql, $params);
答案 2 :(得分:-1)
我认为你需要使用双撇号来逃避撇号。在执行插入操作后,检查表中的数据,它应该只显示一个撇号。
$string = "Home''s";
$DBH->prepare( "INSERT INTO table_name (column_name) VALUES ('" .$string. "')" );
$DBH->execute();
祝你好运......