我有一个PHP程序,它将插入一个新行,或者如果它已经存在则更新现有的那个。在浏览器上运行时,它会返回错误。
但是,实际调用在phpMySQL上运行正常 - 没有报告错误并且行已更新。
"Errormessage: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '"updated", `conditions` =" ",' at line 1.
连接到mySQL并进行更新或插入的代码非常简单
require_once ('mysqli_connect.php');
if (mysqli_connect_errno())
{
echo "Failed to connect to MySQL: " . mysqli_connect_error($dbcon);
exit ;
}
然后我创建调用的实际主体,它产生包含this的变量$ call(示例是UPDATE):
UPDATE `deal` SET `deal_lotus_source` = "updated", `conditions` =" ", `termsnotes` = " ", `walkprovision` = " ", `sector` = "Application Software", `industry` = "Airconditioning", `tgt` = "Bcd", `acq` = "E", `dtstart` = "2015/03/08" , `dtclose` = "2015/03/23", `dtexdivtgt` = "2015/03/17", `dtexdivacq` = "2015/03/17", `dtexdivtgtexp` = "2015/03/17", `dtexdivacqexp` = "2015/03/17", `acq` = "E",`stat`= "Closed",`acqtype`= "Domestic",`dealtype`= "Acquisition of Private Company Cash-Stoc",`analyst`= "Fred Blogs",`tgttkr`= "ABC",`tgtx`= "C",`tgtprec`= "$",`tgtpret`= "1",`tgtshrout`= "2",`acqtkr`= "D",`acqx`= "F",`acqprec`= "$",`acqpret`= "3",`acqshrsout`= "4",`dlvalue`= "5",`eacls`= "Actual",`tgtlaw`= "",`acqlaw`= "",`tgtbank`= "",`acqbank`= "",`tgtshrsoutfd`= "6",`acqshrsoutfd`= "7",`tgtdebt`= "8",`acqdebt`= "8",`suppress`= "0",`pricingp`= "",`terminate`= " ",`divstattgt`= "",`divstatacq`= "",`divfreqtgt`= "Quarterly",`divfreqacq`= "Quarterly",`divcurrtgt`= "$",`divcurracq`= "$",`divamttgt`= "0.000",`divamtacq`= "0.000", `cos` = "", `mot` = "" WHERE deal_id =578
和更新(或插入)的代码是
if (!mysqli_query($dbcon, $call)) {
printf("Errormessage: %s\n", mysqli_error($dbcon));
die;
}
有什么想法吗?
答案 0 :(得分:1)
您必须在值周围使用单引号:
UPDATE `deal` SET `deal_lotus_source` = 'updated', `conditions` =' ', `termsnotes` = ' ', `walkprovision` = ' ', `sector` = 'Application Software', ...
答案 1 :(得分:1)
PHP中的引号可能令人困惑,因为根据您使用的引用类型(不同的规则)(http://www.trans4mind.com/personal_development/phpTutorial/quotes.htm)。要记住的最重要的事情(在这种情况下)是这两个:
*如果你在双引号("$var"
)里面有一个变量($ var),那么它将被替换(你的字符串现在将包含value
),而如果它是单引号({{1然后它不会被替换(它作为'$var'
保留在你的字符串中)
*如果您需要单引号作为字符串的一部分,则在字符串周围使用双引号。 ($var
)如果您需要双引号作为字符串的一部分,请使用单引号括起字符串。 ("I don't like contractions and I can't bear to use them."
)
您正在使用双引号(请注意您要比较的值'He said, "Hello, Dear!" and she slapped him.'
和conditions
等等),但您要在字符串中更改为单引号,以便您可以用双引号包围整个事物。这也有一个优点,允许您在其中使用变量。
termsnotes
请注意,整行代码中的仅双引号是字符串的开头和结尾处的双引号。如果你想在字符串中添加双引号,那么你必须在它前面放一个反斜杠。
当您在字符串中构建查询时(尤其是如果您遇到错误),一个非常重要的步骤是实际查看它。使用$call = "UPDATE `deal`
SET `deal_lotus_source` = 'updated',
`conditions` =' ',
`termsnotes` = ' ',
`walkprovision` = ' ',
...
`mot` = ''
WHERE deal_id =578";
,然后仔细查看所有引号等。您可以将此回显的结果复制/粘贴到phpMyAdmin中,看看实际查询是否在您的sql选项卡中有效 - 这是一个很好的测试。 / p>
总之,PHP中的引号非常一致且功能非常强大,但它们确实有可能在将字符串赋值给变量的过程中更改字符串。验证分配后的字符串 是否是您期望的字符串非常重要。