#php
#php
Вопрос:
Я работаю над проектом, в котором пользовательский ввод отправляется обратно в базу данных SQL. У меня есть 3 PHP-файла: 1 — создает соединение с БД. 2 — имеет функцию submitAnswers(), которая создает stmt и выполняет его. 3 — индексная страница, которая вызывает функцию для отправки данных. Я получаю эту ошибку при ее запуске:
Array ([0] => Array ([0] => IMSSP [SQLSTATE] => IMSSP [1] => -14 [code] => -14 [2] => В sqlsrv_prepare был передан недопустимый параметр. [сообщение] => В sqlsrv_prepare был передан недопустимый параметр. ) )
Когда я запускаю весь этот код из одного файла, он работает — подключается к моей базе данных и записывает в нее. Я предполагаю, что это связано с тем, что я не знаю, как использовать require_once и / или include
Это код для каждого файла.
db.inc.php
<?php
$serverName = "localhost\sqlexpress";
/* Get UID and PWD from application-specific files. */
$uid = file_get_contents("C:AppDatauid.txt");
$pwd = file_get_contents("C:AppDatapwd.txt");
$connectionInfo = array( "UID"=>$uid,
"PWD"=>$pwd,
"Database"=>"mydb");
/* Connect using SQL Server Authentication. */
$conn = sqlsrv_connect( $serverName, $connectionInfo);
if( $conn === false )
{
echo "Unable to connect.</br>";
die( print_r( sqlsrv_errors(), true));
}
functions.inc.php
<?php
function submitAnswers(){
$sql = "INSERT INTO [dbo].[testtable] (firstname, lastname) VALUES (?, ?)";
$params = array("John", "Doe");
$stmt = sqlsrv_prepare( $conn, $sql, $params);
if($stmt)
{
echo "Statement prepared.n";
}
else
{
echo "Error in executing statement.n";
die( print_r( sqlsrv_errors(), true));
}
/* Execute the statement. Display any errors that occur. */
if( sqlsrv_execute( $stmt))
{
echo "Statement executed.n";
}
else
{
echo "Error in executing statement.n";
die( print_r( sqlsrv_errors(), true));
}
header("location: success.php");
sqlsrv_free_stmt( $stmt);
sqlsrv_close( $conn);
exit();
}
index.php
<?php
require_once 'db.inc.php';
require_once 'functions.inc.php';
submitAnswers();
Как я уже сказал, причина, по которой я разделяю это на три файла, заключается в том, что мне сказали, что это хорошая практика.
Любая помощь будет высоко оценена. Спасибо, Том.
Комментарии:
1. Добавьте это в начало основного скрипта, появится больше ошибок. ini_set(‘display_errors’, 1); ini_set(‘display_startup_errors’, 1); error_reporting(E_ALL);
2.Может возникнуть проблема с поиском файлов file. В зависимости от того, какой php был настроен, он может не отображаться в текущем каталоге.
require_once __DIR__.'/db.inc.php';
__DIR__
это магическая константа.3. Внутри
submitAnswers()
, что$conn
должно быть внутри? Откуда это должно исходить? Достаточно ли умен PHP, чтобы понять это? (Подсказка: последний ответ — «нет».)4. @miken32 да, я пытался обернуть код подключения к БД в функцию и вернуть $conn, но это тоже не сработало.