PHP,MySQL存储过程不按预期存储数据

时间:2017-07-07 15:35:31

标签: php mysql stored-procedures

似乎没有重复这个问题,我觉得这应该是一个简单的解决方案。 我测试了存储过程,添加参数时工作正常, 我还测试了一个简单的SQL语句,它也可以按预期工作。 但是,当我尝试将变量传递给语句时,我会使用SQL获得" Zero结果:"我也尝试过这样做只是一个准备好的语句或者仅仅是我的变量的纯SQL,但它再也不会在数据库中存储任何东西。 调试输出显示我想要传递的内容,但没有任何内容进入数据库

这是完整的代码

require_once (getcwd() . "/lib/dataLib.php");
if ($_SERVER['REQUEST_METHOD'] === 'POST')
{
    if (isset($_POST['btnSubmit']))
    {
        $projectName = $_POST['projectName'];
        $projectDescription = $_POST['projectDescription'];
        $projectLink = $_POST['projectLink'];
        addItemToDatabase($projectName, $projectDescription, $projectLink);
    }
}


/********************************
* addItemToDatabase
*******************************/
function addItemToDatabase($name, $description, $link)
{
$projectLinkSanSpace = str_replace(' ', '', $link);
$projectLinkAsLink = "<a href='project/" . $projectLinkSanSpace . "'>" . $link . "</a>";

databaseConnection('programWork');
$conn = new mysqli(DBF_SERVER, DBF_USER, DBF_PASSWORD, DBF_NAME);
if ($conn -> connect_error)
{
    die("Connection Failed!: " . $conn ->connect_error);
}
/*$sql = 'insert into projectList (
 *projectName, 
 *projectDescription, 
 *projectPage, 
 *projectSource) 
 *Values ("Stuff", "Things", "Yeah", "Yeah")'; */
$sql = "call insertItemIntoWork($name, $description, $projectLinkAsLink, $projectLinkAsLink)";
$result = $conn->query($sql);
displayResult($result, $sql);
}

关于代码的一些注释, 我使用lib来调用我没有复制/粘贴的外部函数,因为我认为它们与问题无关。我也没有包含HTML位,这些形式应该是相当直接的,并且应该可以工作,因为调试 displayResults()显示了值。

底线问题是,有什么程序性的我在这里搞砸了。我不必调用我想的函数,但这是在运行查询后设置变量的情况吗?

UPDATE 我在下面为Jay添加了一个错误处理程序:

$echoSuccess = true;
$msg = "The query completed successfully";
if ($conn->query($sql) === TRUE)
{
    if ($echoSuccess)
    {
        echo "<span class='errMsg'>" . $msg . " successful.</span><br />";
    }
} else
{
    echo "<strong>Error when: " . $msg . "</strong> using SQL: " . $sql . "<br />" . $conn->error;
    //displayResult($result, $sql)
}

说我的SQL有错误。 我想我可以解决这些问题,因为我不认为这个问题需要进一步回答,而是说明错误处理程序的需要

1 个答案:

答案 0 :(得分:0)

所以, 谢谢杰伊布兰查德指出我正确的方向,结果我输入的空格导致问题进入数据库的项目。 为了解决这个问题,我不得不在我的参数周围加上引号,虽然这似乎是一个奇怪的要求(也许我错过了一些东西) 但它现在按预期工作。 以下是改动:

error_reporting(E_ALL); ini_set('display_errors', 1);
include "lib/style.php";
require_once (getcwd() . "/lib/coleSterlingLib.php");
//require_once (getcwd() . "/lib/jsFormInteraction.js");
if ($_SERVER['REQUEST_METHOD'] === 'POST')
{
    if (isset($_POST['btnSubmit']))
    {
        $projectName = $_POST['projectName'];
        $projectName = "'" . $projectName . "'";
        $projectDescription = $_POST['projectDescription'];
        $projectDescription = "'" . $projectDescription . "'";
        $projectLink = $_POST['projectLink'];
        $projectLink = "'" . $projectLink . "'";
        addItemToDatabase($projectName, $projectDescription, $projectLink);
    }
}

请注意$projectName = "'" . $projectName . "'";

其他一切都保持不变

function addItemToDatabase($name, $description, $link)
{
$projectLinkSanSpace = str_replace(' ', '', $link);
$projectLinkAsLink = "<a href='project/" . $projectLinkSanSpace . "'>" . $link . "</a>";

databaseConnection('programWork');
$conn = new mysqli(DBF_SERVER, DBF_USER, DBF_PASSWORD, DBF_NAME);
if ($conn->connect_error)
{
    die("Connection Failed!: " . $conn->connect_error);
}
//$sql = 'insert into projectList (projectName, projectDescription, projectPage, projectSource) Values ("Stuff", "Things", "Yeah", "Yeah")';
$sql = "call insertItemIntoWork($name, $description, $link, $link)";
//$result = $conn->query($sql);
$echoSuccess = true;
$msg = "The query completed successfully";
if ($conn->query($sql) === TRUE)
{
    if ($echoSuccess)
    {
        echo "<span class='errMsg'>" . $msg . " successful.</span><br />";
    }
} else
{
    echo "<strong>Error when: " . $msg . "</strong> using SQL: " . $sql . "
<br />" . $conn->error;
    //displayResult($result, $sql)
}
}